在被编译器错误指出之后,我注意到clang的 stdbool.h 文件包括(其中包括)以下几行:

#define bool  bool
#define false false
#define true  true

它们包含在间接强制#ifdef__cplusplus块中,因此即使stdbool.h是C header ,也可以使用c++标记。

这些定义有什么需要?我想出于某些与预处理器相关的原因而需要它们,但我想知道标准的哪一部分或哪个技术原因使之成为标准,因此clang必须包括这些内容。

最佳答案

stdbool.h是C头,不是C++头。它通常在C++程序中找不到,因为truefalse已经是C++中的关键字。

因此,如果C++程序包含stdbool.h,则相当清楚地表明它是移植的C程序(例如,被编译为C++的C程序)。在这种情况下,根据GCC stdbool.h 的注释,G++在C++模式下支持stdbool.h作为GNU扩展:

/* Supporting <stdbool.h> in C++ is a GCC extension.  */
#define _Bool        bool
#define bool        bool
#define false        false
#define true        true

...

/* Signal that all the definitions are present.  */
#define __bool_true_false_are_defined        1

同样,Clang支持C++中的stdbool.h以与G++兼容。
在此故意定义这些值以匹配内置C++类型,而不是传统的C99定义。它们被定义为宏,以提供与C99 standard的某些兼容性,这需要:

关于c++ - 为什么clang的stdbool.h包含#define false false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30875069/

10-11 18:43