一个人如何防止列入一个周期在C?ie。你不应该有一个。h#include"b.h",这#包括的"c。h"这#包括的"。h"。我在寻找一种方式防止这种情况的发生使用某种形式的C指令。

我原本以为这样会防止发生这种情况:

内容中的一个。h:

#ifndef __A_H
#define __A_H

#include "b.h"

#endif // __A_H

内容b。h:

#ifndef __B_H
#define __B_H

#include "c.h"

#endif // __B_H

内容c。h:

#ifndef __C_H
#define __C_H

#include "a.h"

#endif // __C_H

但它似乎不到工作。

有帮助吗?

解决方案

它确实工作正常:重复包含 文件,但#ifdndef / #define / #endif 保护的部分不会重复,这会打破周期

使用编译器生成预处理输出并自行查看。使用GNU CC,您需要使用“-E” .c [pp]文件上的选项,如下所示:

gcc -E $(CFLAGS) -o foo.i foo.cpp

其他提示

应工作。这是正确写入在你的实例,编制现我。你有没有输错的东西在你的实际代码,或是它真的一些其他的问题你看到的?

你不应该开始的事情出来__,不过,因为保留的编译器和/或系统的图书馆。尝试一些其它的名字为你的警卫。

具有前导下划线的宏保留给预处理器/编译器。

尝试将__ * _ H更改为更标准的内容。
我使用HAVE __ * _ H。

ya除了以上内容之外,如果您正在使用turbo c并且您正在使用这些源文件进行项目,那么请不要附加源文件中包含#included的头文件。即使这样,如果不是然后工作然后从命令提示符尝试它,因为一些编译器选项一次又一次地给出这些错误。所以如果头文件内容在#ifndef和#endif之间,那么即使你包含这两个文件也没有问题。所以尝试从项目中删除头文件,将它们保存在同一个目录中.bcos你没有指定环境我指定了turbo C,因为我在turbo C上面对这种情况,头文件#included在源文件中并附加到项目文件列表然后会出现“多重声明问题”。编译后(即使有错误)也可以转到外部命令行并转到存放该文件的目录,然后直接尝试使用filename.exe。

这很有效。

为了确定,我实际上编译了一个test.c,其中包含带有3个头文件的a.h。

我验证了这适用于MSVC,Digital Mars和GCC的几个版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top