bool

【原创】bool、BOOL 和 _Bool 辨析

你。 提交于 2019-12-01 21:12:43
最近在搞跨平台编译的时候又遇到了 C99 标准支持的问题,主要体现在布尔类型问题上面。于是乎决定把这个问题彻底搞搞清楚,遂成此文。 【 bool、BOOL 和 _Bool 的区别 】 bool 类型在 C++ 中以关键字的形式被支持,表示布尔类型,其对应变量的值只有真(true)和假(false)两种值。 BOOL 类型在头文件 <windef.h> 中定义为 typedef int BOOL;在头文件 <wtypes.h> 中定义为 typedef long BOOL; BOOL 类型的长度视实际环境来定,一般可认为是 4 个字节。 BOOL 是微软定义的表达布尔逻辑的类型。与 C++ 中的 bool 类型不同是,它是一个三值逻辑:TRUE、FALSE 和 ERROR。当返回值为大于 0 的整数时为 TRUE,返回值为 0 时为 FALSE,返回值为 -1 时为 ERROR。 _Bool 是 C99 标准中定义的一个新关键字,以提供布尔类型。C2008 草案中只规定了 _Bool 类型的大小至少应能够存放 0 和 1 这两个值。而并没有规定具体的大小。这交给编译器自由发挥了。 【跨平台如何使用布尔类型】 C++ 里有专门的 bool 关键字。但是在 C99 之前,C 语言里没有这样的类型。从 C99 标准开始,增加了关键字 _Bool 用来表示布尔类型。所以只要你的编译器支持