【发布时间】:2015-09-01 17:07:40
【问题描述】:
在被编译器错误指出后,我注意到 clang 的 stdbool.h 文件包括(除其他外)以下几行:
#define bool bool
#define false false
#define true true
它们包含在 #ifdef 块中,间接强制执行 __cplusplus,因此即使 stdbool.h 是 C 标头,c++ 标记也是如此。
这些定义有什么需要?我想它们是某些与预处理器相关的原因所必需的,但我很想知道标准的哪一部分或哪个技术原因使它如此铿锵必须包括这些。
【问题讨论】:
-
这很可能是为了安抚那些期望
false和true是宏的移植 C 程序(例如,使用#ifndef false测试)。 -
这里有一个相关的问题,并不是说答案一定完全一样,有些优点是一样的:stackoverflow.com/questions/21855326/utility-of-macros-for-enum
-
一方面,如果有人再次尝试
#define他们,它会导致警告。 -
您应该阅读有关 GNU 扩展的 cmets。
-
什么编译器错误指向你?如果它是“
false的重新定义”或其他东西......那么按预期工作:)
标签: c++ clang language-lawyer