将C struct对象实例化为全局变量是不好的做法吗?

时间:2015-02-06 17:09:28

标签: c struct declaration

这是一个示例代码,声明了struct A然后它的实例“instanceOfA”在main中定义,因此它成为局部变量并且在其他函数中访问它我应该将它作为参数传递。另一方面,struct B被声明,它的实例定义为全局变量,允许我在任何需要的地方使用“instanceOfB”,而不是将其作为参数传递。我现在唯一要担心的是,某些功能可能会覆盖“instanceOfA”标识符吗?因为它的变量(a,b,c)已经存在于它自己的“命名空间”中。那么将struct对象定义为全局变量是一种不好的做法吗?你会怎么做? 抱歉我的英语不好。

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;

}

2 个答案:

答案 0 :(得分:1)

我不确定究竟是什么问题,但这里有一些想法。

instanceOfB是一个全局变量,对吗?所以,它是evil that should be avoided if not strictly necessary

相反,函数体内的struct A instanceOfA;对我来说很好,尽管我们通常会将struct命名空间中的类型移动到using typedef struct idiom的全局命名空间以减少输入。

答案 1 :(得分:1)

是的,确实,将任何定义为全局变量是非常糟糕的做法,而不仅仅是结构。

是的,您需要将其作为参数传递。这真的很好,不错。

这意味着程序中的每一段代码(函数)都只能修改它所修改的内容,而不是它想要的内容。