将 C 结构对象实例化为全局变量是不好的做法吗?
Is it bad practice to instantiate C struct object as global variable?
这是一个示例代码,声明了 struct A,然后在 main 中定义了它的实例 "instanceOfA",因此它成为局部变量并在其他函数中访问它,我应该将它作为参数传递。另一方面,声明了 struct B 并将其实例定义为全局变量,这使我可以在需要的任何地方直接使用 "instanceOfB",而不是将其作为参数传递。我现在唯一应该担心的是某些函数可能会覆盖 "instanceOfA" 标识符,对吗?因为它的变量 (a,b,c) 已经在它自己的 "namespace" 中。那么将结构对象定义为全局变量是一种不好的做法吗?你会怎么做?
抱歉我的英语不好。
struct A {
int a,b,c;
};
struct B {
int a,b,c;
} instanceOfB;
int main(void) {
struct A instanceOfA;
instanceOfA.a = 5;
instanceOfB.a = 10;
}
我不确定问题到底是什么,但这里有一些想法。
instanceOfB
是全局变量吧?所以,它是一个evil that should be avoided if not strictly necessary。
相反,函数体内的 struct A instanceOfA;
对我来说看起来不错,尽管我们通常通过 using typedef struct
idiom 将类型从 struct
命名空间移动到全局命名空间以减少输入。
是的,确实,将 anything 定义为全局变量是非常糟糕的做法,而不仅仅是结构。
是的,您需要将其作为参数传递。其实还不错,不错。
这意味着您程序中的每一段代码(函数)只能修改它被赋予修改的内容,而不能随意修改。
这是一个示例代码,声明了 struct A,然后在 main 中定义了它的实例 "instanceOfA",因此它成为局部变量并在其他函数中访问它,我应该将它作为参数传递。另一方面,声明了 struct B 并将其实例定义为全局变量,这使我可以在需要的任何地方直接使用 "instanceOfB",而不是将其作为参数传递。我现在唯一应该担心的是某些函数可能会覆盖 "instanceOfA" 标识符,对吗?因为它的变量 (a,b,c) 已经在它自己的 "namespace" 中。那么将结构对象定义为全局变量是一种不好的做法吗?你会怎么做? 抱歉我的英语不好。
struct A {
int a,b,c;
};
struct B {
int a,b,c;
} instanceOfB;
int main(void) {
struct A instanceOfA;
instanceOfA.a = 5;
instanceOfB.a = 10;
}
我不确定问题到底是什么,但这里有一些想法。
instanceOfB
是全局变量吧?所以,它是一个evil that should be avoided if not strictly necessary。
相反,函数体内的 struct A instanceOfA;
对我来说看起来不错,尽管我们通常通过 using typedef struct
idiom 将类型从 struct
命名空间移动到全局命名空间以减少输入。
是的,确实,将 anything 定义为全局变量是非常糟糕的做法,而不仅仅是结构。
是的,您需要将其作为参数传递。其实还不错,不错。
这意味着您程序中的每一段代码(函数)只能修改它被赋予修改的内容,而不能随意修改。