我注意到Linux内核代码使用bool类型,但我以为bool类型是c++类型。bool是标准的C扩展名(例如,ISO C90)还是GCC扩展名?
当前回答
不,在ISO C90中没有bool。
下面是标准C(不是C99)中的关键字列表:
汽车 打破 情况下 字符 常量 继续 默认的 做 双 其他的 枚举 走读生 浮动 为 转到 如果 int 长 注册 返回 短 签署 静态 结构体 开关 类型定义 联盟 无符号 无效 挥发性 而
这里有一篇文章讨论了在内核和标准中使用的C语言的其他一些区别:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html
其他回答
不,在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。
_Bool是C99中的关键字:它指定类型,就像int或double一样。
6.5.2 2声明为_Bool类型的对象 是否大到足以存储值0 和1。
/* Many years ago, when the earth was still cooling, we used this: */
typedef enum
{
false = ( 1 == 0 ),
true = ( ! false )
} bool;
/* It has always worked for me. */
推荐文章
- C中的>>>=运算符是什么?
- Volatile boolean vs AtomicBoolean
- 如何测试Linux内核?
- GCC转储预处理器定义
- 如何在C中实现函数重载?
- 如何在Mac OS X 10.8 / Xcode 4.4上使用/安装gcc
- pty和tty是什么意思?
- 结构填充物和填料
- 如何禁用几行代码的GCC警告
- bool是否是原生C类型?
- .c vs .cc vs .cpp vs .hpp vs .h vs .cxx
- 实现基于整数的幂函数pow(int, int)的最有效方法
- 如何正确使用extern关键字在C
- 为什么gets函数如此危险以至于不应该使用它?
- 为什么NaN - NaN == 0.0与英特尔c++编译器?