BOOL与bool区别

1. BOOL

BOOL是微软定义的宏,实际上是int型,占4个字节(由实际系统决定),该定义位于VC目录下WINDEF.H、AFX.H,可以找到如下代码:

// WINDEF.H
typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef float               FLOAT;

// AFX.H
#define FALSE   0
#define TRUE    1
#define NULL    0

BOOL是一个三值逻辑,TRUE/FALSE/ERROR,返回值为>0的整数为TRUE,0为FALSE,-1为ERROR。(即0和非0区别)

Win32 API , MFC 中很多返回值为BOOL的函数都是三值逻辑,比如GetMessage()。


2. bool

bool(又叫布尔型)是标准C++数据类型,可取值true和false,(即0和1区别)

它单独占一个字节。

如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。

3. 例子

右边的均为编译器的检测提示
bool x=3; //告警

bool x=1; //正确

BOOL x=3; //正确

BOOL x=3.3; //告警

4.  定义BOOL与bool原因(TRUE FALSE 与 true false)

问题:C语言中已经有true和false还有null,微软为什么还定义TRUE, FALSE, NULL?

回答:因为true,false, null内存空间占用1 ,而TRUE, FALSE, NULL内存空间占用4
            根据intel CPU的内存分页机制,4字节可以防止内存松散,防止产生更多的内存碎片,有利于数据的传输。

5. 编写window API 错误提示

提示: warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)

原因:它表示表达式的左值定义为bool,而这时右值为BOOL,故发生警告。

解决:方法1,可以重新定义左值为BOOL。

            方法2,则可以向该表达式中添加“!=0”,它可使表达式成为 bool 类型。 将表达式转换为 bool 类型不会禁用警告。


6. 参考来源

[1]http://blog.csdn.net/wangningyu/article/details/4669020   博主:wangningyu

[2]http://hi.baidu.com/hduzn/item/01cfaee9eed011c6bbf37d0a   博主:我专注,我快乐


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值