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


当前回答

C99添加了一个bool类型,它的语义与C中之前存在的所有整数类型(包括用户定义的和用于此目的的编译器扩展类型)有本质上的不同,一些程序可能已经将其“类型定义”为bool。

例如,给定bool a = 0.1, b=2, c=255, d=256;, C99 bool类型将把所有四个对象都设置为1。如果C89程序使用typedef unsigned char bool,对象将分别接收0、2、255和0。如果它使用char,则值可能如上所示,或者c可能是-1。如果它使用了编译器扩展位或__bit类型,则结果可能是0,0,1,0(处理位的方式相当于大小为1的无符号位域,或具有一个值位的无符号整数类型)。

其他回答

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) { ... }
/* 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. */

C99添加了一个bool类型,它的语义与C中之前存在的所有整数类型(包括用户定义的和用于此目的的编译器扩展类型)有本质上的不同,一些程序可能已经将其“类型定义”为bool。

例如,给定bool a = 0.1, b=2, c=255, d=256;, C99 bool类型将把所有四个对象都设置为1。如果C89程序使用typedef unsigned char bool,对象将分别接收0、2、255和0。如果它使用char,则值可能如上所示,或者c可能是-1。如果它使用了编译器扩展位或__bit类型,则结果可能是0,0,1,0(处理位的方式相当于大小为1的无符号位域,或具有一个值位的无符号整数类型)。

stdbol .h是c99年引入的

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