我注意到Linux内核代码使用bool类型,但我以为bool类型是c++类型。bool是标准的C扩展名(例如,ISO C90)还是GCC扩展名?
当前回答
C99在stdbool.h中定义了bool, true和false。
其他回答
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原生识别为语言文字。
_Bool是C99中的关键字:它指定类型,就像int或double一样。
6.5.2 2声明为_Bool类型的对象 是否大到足以存储值0 和1。
从C23开始,bool、true和false都是C关键字,不需要任何#include。
Bool成为基本的内置数据类型之一。
_Bool仍然有效,并被视为“替代拼写”。
头文件<stdbool.h>只提供过时的宏__bool_true_false_are_defined,它展开为整数常量1。
你可以在这里找到最新的草案: https://open-std.org/JTC1/SC22/WG14/www/docs/n2912.pdf
stdbol .h是c99年引入的
h定义了true和false宏,但是请记住它们被定义为1和0。
这就是sizeof(true) = sizeof(int)的原因,对于32位架构,sizeof(int)为4。
推荐文章
- c++中size_t和int的区别是什么?
- 在C和c++中静态变量存储在哪里?
- Java中的&和&&有什么区别?
- errno线程安全吗?
- 如何在C程序中获取当前目录?
- 互斥实例/教程?
- 如何添加一个'或'条件在#ifdef
- extern关键字对C函数的影响
- 如果使用if-return-return或if-else-return?
- 转换Python程序到C/ c++代码?
- 为什么程序不是经常用汇编编写的?
- 有没有替换Windows (Visual C)的unistd.h ?
- 使用gcc命令行从.c文件构建.so文件
- C多行宏:do/while(0) vs作用域块
- time_t最终的类型定义是什么?