1

我的文件是

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 中看到了

我将对这两种结构都有多个声明,我该如何摆脱这个问题。我应该改变我的结构?

谢谢

4

4 回答 4

7

使用包括警卫。

前锋.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
于 2013-03-28T09:55:08.070 回答
1

你可以这样使用警卫,

#ifndef MY_STRUCT
#define MY_STRUCT
#include "struct.h"
#endif

如果您想有选择地处理不应该重复的部分

于 2013-03-28T09:55:20.227 回答
1

将头文件包装在包含保护中。, 像这样:

#ifndef MYHEADER_H
#define MYHEADER_H

    // your definitions

#endif

每个头文件都应该有自己的具有唯一名称的保护。上面翻译成英文的预处理器指令是这样说的:“如果MYHEADER_H未定义,则定义它并粘贴内容直到#endif指令。” 这保证了单个标题在单个翻译单元中仅包含一次。

于 2013-03-28T09:55:26.027 回答
1

只需使用所谓header guard的来确保只包含一次“struct.h”:

// struct.h
#ifndef STRUCT_H
#define STRUCT_H

struct ...{

}

#endif
于 2013-03-28T09:56:33.937 回答