我的文件
main.c
#include"A.h"
#include"B.h"
A.c
#include"A.h"
B.c
#include"B.h"
我有一个文件,其中包含一些我已定义的结构,我应该在所有文件中使用,A.c , B.c, main.c
甚至A and B
的头文件。
因此我有
A.h
和B.h
都有
#include"struct.h"
现在,我在main.c中看到了
我将对这两个结构进行多次声明,如何摆脱这个问题。我的结构会改变什么?
由于
答案 0 :(得分:7)
使用包含警卫。
aheader.h:
#ifndef AHEADER_H
#define AHEADER_H
// ... rest of header here
#endif
bheader.h:
#ifndef BHEADER_H
#define BHEADER_H
// ... rest of header here
#endif
答案 1 :(得分:1)
你可以使用这样的守卫,
#ifndef MY_STRUCT
#define MY_STRUCT
#include "struct.h"
#endif
如果您想有选择地注意哪些部分不应该重复
答案 2 :(得分:1)
将标题文件包装在include guards.中,如下所示:
#ifndef MYHEADER_H
#define MYHEADER_H
// your definitions
#endif
每个头文件都应该有自己的具有唯一名称的警卫。上述翻译成英语的预处理程序指令如下所示:“如果未定义MYHEADER_H
,则定义它并粘贴内容直到#endif
指令。”这可以保证在单个翻译单元中只包含一个标题。
答案 3 :(得分:1)
只需使用所谓的header guard
即可确保只包含一次“struct.h”:
// struct.h
#ifndef STRUCT_H
#define STRUCT_H
struct ...{
}
#endif