我注意到Linux内核代码使用bool类型,但我以为bool类型是c++类型。bool是标准的C扩展名(例如,ISO C90)还是GCC扩展名?
当前回答
h定义了true和false宏,但是请记住它们被定义为1和0。
这就是sizeof(true) = sizeof(int)的原因,对于32位架构,sizeof(int)为4。
其他回答
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原生识别为语言文字。
/* 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. */
没有这样的东西,可能只是int的宏
C99在stdbol .h中有它,但在C90中必须定义为类型定义或enum:
typedef int bool;
#define TRUE 1
#define FALSE 0
bool f = FALSE;
if (f) { ... }
另外:
typedef enum { FALSE, TRUE } boolean;
boolean b = FALSE;
if (b) { ... }
h定义了true和false宏,但是请记住它们被定义为1和0。
这就是sizeof(true) = sizeof(int)的原因,对于32位架构,sizeof(int)为4。