我注意到Linux内核代码使用bool类型,但我以为bool类型是c++类型。bool是标准的C扩展名(例如,ISO C90)还是GCC扩展名?


当前回答

_Bool是C99中的关键字:它指定类型,就像int或double一样。

6.5.2 2声明为_Bool类型的对象 是否大到足以存储值0 和1。

其他回答

bool在当前C - C99中存在,但在C89/90中不存在。

在C99中,本机类型实际上被称为_Bool,而bool是stdbool.h中定义的标准库宏(它预期会解析为_Bool)。_Bool类型的对象持有0或1,而true和false也是来自stdboolh的宏。

顺便说一句,这意味着C预处理器将把#if true解释为#if 0,除非包含stdboolh .h。同时,c++预处理器需要将true原生识别为语言文字。

不,在ISO C90中没有bool。

下面是标准C(不是C99)中的关键字列表:

汽车 打破 情况下 字符 常量 继续 默认的 做 双 其他的 枚举 走读生 浮动 为 转到 如果 int 长 注册 返回 短 签署 静态 结构体 开关 类型定义 联盟 无符号 无效 挥发性 而

这里有一篇文章讨论了在内核和标准中使用的C语言的其他一些区别:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

没有这样的东西,可能只是int的宏

h定义了true和false宏,但是请记住它们被定义为1和0。

这就是sizeof(true) = sizeof(int)的原因,对于32位架构,sizeof(int)为4。

C99在stdbool.h中定义了bool, true和false。