在被编译器错误指出之后,我注意到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++程序中找不到,因为true
和false
已经是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/