我有一个全局变量结构:
typedef struct {
int myvar1;
int myvar2;
int myvar3;
...
int myvar10;
} t_myStruct myGlobalData;
我无法避免这种全局结构,所以我不得不使用它。 我有三个选项可以使用它:
“按原样”在任何函数中使用全局变量。即:
int myFunc(void) { myGlobalData.myvar1 = ... myGlobalData.myvar10 = myGlobalData.myvar5 + ... }
声明一个本地指针并使用它:
int myFunc(void) { t_myStruct * p; p = &myGlobalData; p->myvar1 = ... ... p->myvar10 = p->myvar5 + ... }
使用本地变量然后复制到全局结构:
int myFunc(void) { t_myStruct localStruct; localStruct.myvar1 = ... localStruct.myvar10 = localStruct.myvar5 + ... myGlobalData = localStruct ; }
可以向我解释一般情况下最好的方法是什么以及为什么?
最佳答案
选择更多的抽象。如果您可以将参数更改为 myFunc
,则为其签名:
int myFunc(t_myStruct *arg)
{
arg->myvar1 = ...
现在函数本身根本不依赖于全局变量的存在。对于需要对这种类型的 struct
进行操作的任何其他函数也是如此。如果您必须使用全局变量,则尽可能多地隔离它的使用,即在尽可能少的地方使用全局变量。
如果您不能更改函数签名,我会从您的问题中选择最直接的选项:第一个。直接对全局变量进行操作即可。
关于c - C 中全局结构变量的最佳使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480941/