C头文件中的包含循环
如何避免C中的包含循环?即。你不应该有a.h #include“b.h”,其中#include的“c.h”是哪个#include的“a.h”。我正在寻找一种方法来防止这种情况发生,使用某种C指令。C头文件中的包含循环
我原本以为这会已经阻止发生这样的:啊
内容:BH的
#ifndef __A_H
#define __A_H
#include "b.h"
#endif // __A_H
内容:
#ifndef __B_H
#define __B_H
#include "c.h"
#endif // __B_H
章的内容:
#ifndef __C_H
#define __C_H
#include "a.h"
#endif // __C_H
但它似乎没有工作。
它不好吧工作:将文件是反复包括在内,但通过#ifdndef /#保护的节定义/#ENDIF 不重复,并且打破的恶性循环。
用你的编译器产生预处理输出,看看它自己。随着GNU CC,你需要使用的.C [PP]文件“-E”选项,如:
gcc -E $(CFLAGS) -o foo.i foo.cpp
我相信你是对的。我认为我的问题与在头文件中定义的枚举有关。 – MSumulong 2008-11-07 23:39:56
宏与领先的下划线被保留用于预处理器/编译器。
尝试改变__ * _^h的东西更多的标准。
我使用HAVE __ * _ H。
这应该工作。它在你的例子中正确写入,并为我编译好。你是否在你的实际代码中输入了错误的内容,或者你确实遇到了其他一些问题?
做为所保留的编译器和/或系统库,您不应该开始的事情了与__,不过,。为你的卫兵尝试一些其他的名字。
This Works。
只是可以肯定的是,我居然编了test.c的,包括A.H与3个文件。
我验证了这个工程的MSVC,数字火星和GCC的多个版本。
ya除了上述的东西,如果你正在使用turbo c,并且你正在使用这些源文件做一个项目,那么就不会附加在源文件中包含的头文件。并且即使它是不工作,然后从命令提示符尝试它,因为一些编译器选项一次又一次地给这些错误。因此,如果头文件内容在#ifndef和#endif之间,那么即使包含这两个文件也没有问题。所以尝试从项目中删除头文件保持在同一目录中.bcos你没有指定环境,我指定涡轮C,因为我遇到过这种情况一次在涡轮C与头文件#included在源文件中并附加到项目文件列表这时会出现“多申报问题”。还有编译(即使有错误)到外部命令行,转至目录文件的存储位置,并与文件名.exe directly.ok
尝试后,我想我找到了问题,它与包含循环无关。我在一个引起我的问题的头文件中包含了一个枚举。谢谢! – MSumulong 2008-11-07 23:43:33
枚举可以放置在标题中 - 如果标题服务的使用者需要它们。 – 2008-11-08 01:21:22