c - C 中全局结构变量的最佳使用

标签 c struct global-variables

我有一个全局变量结构:

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/

相关文章:

javascript - window 和 top javascript 全局变量有什么区别?

c - 如何在 ANSI C 89 中读取/写入单个文件

C:在没有 main() 的情况下编译某些对象(用于共享库)失败?

c - 使用从 argv 传递的 pid

c - 声明没有声明任何东西 : warning?

c - 从 C 中的结构数组中检索结构以进行 qsort

c - 服务器到客户端通信 gRpc

ios - 将 NSUserDefaults 与结构类型的数组一起使用

jquery - AJAX 全局变量

c - 在 C 中使用#define 定义全局 int 和二维矩阵