【发布时间】:2015-12-14 04:25:16
【问题描述】:
简短说明:
Header.h 有 #include <stdbool.h>,它有一个用于 c 中 _Bool 的宏。
file.cpp 包括 Header.h,但由于 file.cpp 是 C++ - 它具有 bool 作为本机类型。现在 lint 抱怨了一组由于这个原因(重新声明、不存在的方法等)。有没有办法防止在不接触Header.h 的情况下将<stdbool.h> 包含在file.cpp 中?
如果我对问题的描述看起来很荒谬 - 请向我扔西红柿 :) 否则,感谢您的帮助。
编辑: 现在再次想到这一点:了解编译和链接的基本概念我应该已经意识到在下游文件/头文件中“排除”某些头文件听起来很有趣,并且不应该没有杂物就不可能.但是,仍然感谢您的帮助。我理解这一点的另一个小砖头。
【问题讨论】:
-
向您的图书馆供应商投诉。
stdbool.h不应将bool和朋友定义为 C++ 中的宏。与此同时,#undef. -
可以修改
header.h吗?然后只需在包含<stdbool.h>之前添加对__cplusplus的条件预处理器检查。你可能想看看你的 linter,它似乎不能很好地处理 C++,或者它不能很好地进行预处理。 -
@T.C.没那么简单,C++98 对
<stdbool.h>只字未提,所以它在 C++98 中的作用是不确定的。 GCC 的<stdbool.h>定义了 C++98 的宏,因为原因。蹩脚的理由。不过,它至少在 C++ 中是#define bool bool,而不是#define bool _Bool,这是非常有害的。 -
@JonathanWakely 与
#ifdef bool的代码兼容,我猜? -
@T.C.确切地说,尽管我不相信这样的代码足够普遍以迎合。请参阅gcc.gnu.org/ml/gcc-patches/2014-10/msg02594.html 了解一些历史。据我所知,没有任何后果,也许我应该重新审视它并尝试为 C++98 取消定义它们:)
标签: c++ c header-files lint