将 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 定义为全局变量是非常糟糕的做法,而不仅仅是结构。

是的,您需要将其作为参数传递。其实还不错,不错。

这意味着您程序中的每一段代码(函数)只能修改它被赋予修改的内容,而不能随意修改。