BOOL是计算机编程中表示布尔型变量的数据类型,以布尔代数奠基人乔治·布尔命名,用于存储逻辑值true(真)和false(假)。其类似float、double等类型,但专用于逻辑判断,常见于条件语句及逻辑运算。不同语言实现存在差异:Objective-C中的BOOL类型取值为YES/NO,Java采用boolean类型,C99标准则通过_Bool关键字和stdbool.h头文件引入原生布尔类型。
如果数个bool对象列在一起,可能会各占一个Byte,这取决于
编译器。
BOOL是
微软定义的typedef int BOOL(在windef.h中),0为FALSE,1为TRUE。(-1和2既不是TRUE也不是FALSE)。
bool可用于定义函数类型为布尔型,函数里可以有
return TRUE; return FALSE 之类的语句。
C99标准定义了一个新的关键字_Bool,提供了
布尔类型。以前,C程序员总是使用自己的方法定义布尔类型。0表示false,非0表示true。可能使用
char类型表示一个布尔类型,也可能使用int类型表示一个布尔类型。很多函数库都定义了自己的布尔类型和相应的宏,枚举,
typedef。C99把C语言原生的布尔类型带来了。C99中同时增添的关键字还有_Complex,_Imaginary等。
“An object declared as type_Boolis large enough to store the values 0
and1.”
也就是说,只规定了_Bool类型的大小是至少能够存放0和1这两个值。并没有规定具体的大小。这交给
编译器自由发挥了。
可以看到,gcc编译器对待_Bool类型有自己的转换处理。如果是0赋值给_Bool类型,那么就赋值0。如果是任意其他数据,那么会赋值为1。(只是不知道其他编译器是否如此处理,C2008
标准草案没有细说这个部分)