Kyr*_*rol 2 c struct global-variables
我有一个全局var结构:
typedef struct {
int myvar1;
int myvar2;
int myvar3;
...
int myvar10;
} t_myStruct myGlobalData;
Run Code Online (Sandbox Code Playgroud)
我无法避免这种全局结构,所以我必须使用它.我有三个选项可以使用它:
在任何函数中使用global var"as is".即:
int myFunc(void) {
myGlobalData.myvar1 = ...
myGlobalData.myvar10 = myGlobalData.myvar5 + ...
}
Run Code Online (Sandbox Code Playgroud)声明一个本地指针并使用它:
int myFunc(void) {
t_myStruct * p;
p = &myGlobalData;
p->myvar1 = ...
...
p->myvar10 = p->myvar5 + ...
}
Run Code Online (Sandbox Code Playgroud)使用local var然后复制到global struct:
int myFunc(void) {
t_myStruct localStruct;
localStruct.myvar1 = ...
localStruct.myvar10 = localStruct.myvar5 + ...
myGlobalData = localStruct ;
}
Run Code Online (Sandbox Code Playgroud)可以解释一下,什么是最好的方式,为什么?
pb2*_*b2q 10
选择更多抽象.如果您可以更改参数myFunc,则进行签名:
int myFunc(t_myStruct *arg)
{
arg->myvar1 = ...
Run Code Online (Sandbox Code Playgroud)
现在,函数本身并不依赖于全局变量的存在.对于需要在struct此类型上运行的任何其他功能也是如此.如果必须使用全局变量,则尽可能地隔离它的使用,即尽可能少地使用全局变量.
如果您无法更改功能签名,我会从您的问题中选择最直接的选项:第一个.只需直接操作全局变量即可.
| 归档时间: |
|
| 查看次数: |
12850 次 |
| 最近记录: |