c-头文件与全局变量的相互包含



对于不运行任何操作系统的微控制器,我在C程序中有许多模块。每个模块都有自己的类型定义、枚举和数据结构定义来表示模块的状态,我认为在模块的相关头文件中定义它们会很好。

然后,我在global_var.c中定义了一个全局变量来"记住"整个系统的当前状态。由于模块的数据结构在全局变量的定义中被引用,因此所有模块头都包含在global_var.h中。

然而,这些模块还需要访问全局变量,因此也需要包含global_var.h。

如果我真的想保留我的全局变量,我该如何避免头文件的相互包含?

非常感谢!

global_var.h

#ifndef GLOBAL_VAR_H
#define GLOBAL_VAR_H
#include "module.h"
typedef struct GLOBAL_STRUCTURE {
    module_structure m;        
} global_structure;
#endif

global_var.c

#include "global_var.h"
global_structure gs;

module.h

#ifndef MODULE_H
#define MODULE_H
typedef struct MODULE_STRUCTURE {
    int a;
} module_structure;
void module_function(void);
#endif

模块.c

#include "global_var.h"
extern global_structure gs;
void module_function(void) {
    gs.m.a=0;
}

我认为C语言应该共享两次定义的全局。但这取决于编译器(好的链接器),你的工具链是否真的做到了,我有一些做到了,有些没有。最安全的方法是只声明一次变量,其他任何地方都显式声明为extern。你会经常看到这样做:

common.h

#ifundef HELLO
#define HELLO
#endif
HELLO unsigned int myglobx;

一个.c

#include "common.h"

2.c

#include "common.h"

3.c

#define HELLO extern
#include "common.h"

试试这个:在模块.c中#定义XYZ

然后在模块.h 中

    #define MODULETYPE
    #ifdef XYZ
     MODULETYPE 
    #else
    MODULETYPE extern
   #endif
   MODULETYPE  int var1,var2;

对每个模块都这样做,并在任何您想要的地方包含您的头。

相关内容

  • 没有找到相关文章

最新更新