如何包含特定的头文件而不会发生冲突

时间:2013-03-28 09:52:12

标签: c compilation header

我的文件

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.hB.h都有

#include"struct.h"

现在,我在main.c中看到了

我将对这两个结构进行多次声明,如何摆脱这个问题。我的结构会改变什么?

由于

4 个答案:

答案 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
相关问题