在C中最好地使用全局结构变量

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此类型上运行的任何其他功能也是如此.如果必须使用全局变量,则尽可能地隔离它的使用,即尽可能少地使用全局变量.

如果您无法更改功能签名,我会从您的问题中选择最直接的选项:第一个.只需直接操作全局变量即可.