题
一个人如何防止列入一个周期在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的几个版本。