0

我在 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;

模块.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;
}
4

2 回答 2

0

试试这个:在 Module.c #define XYZ

然后在 Module.h

    #define MODULETYPE
    #ifdef XYZ
     MODULETYPE 

    #else
    MODULETYPE extern
   #endif
   MODULETYPE  int var1,var2;

对每个模块执行此操作,并将您的标题包含在您想要的任何位置。

于 2013-08-31T14:02:17.160 回答
0

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

常见的.h

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

一.c

#include "common.h"

二.c

#include "common.h"

三.c

#define HELLO extern
#include "common.h"
于 2013-08-30T14:27:56.287 回答