BOOL与bool不同

一直以来,想当然地以为,就像INT在VC中被typedef成int, CHAR被typedef成char一样,BOOL也是被定义成bool. 直到有一天Debug时发现BOOL型变量值竟然为2!

原来Windef.h中,如下重定义:

Line153:   typedef int                 BOOL;


BOOL与int完全同义!这令我不安起来,如果有一个BOOL型返回值的函数被写成return成2,而判断这个返回值时使用==TRUE的话,条件永远不会为真,更要命的是编译器检查不出任何的问题,连警告都不会出现。

当然,如果返回型是BOOL,你的返回值最好老实地写成TRUE或是FALSE,这样倒也相安无事。


不少Windows API返回值都被定义成BOOL,GetMessage就是一个例子。在MSDN中,对返回值这样解释来着——

1. 如果。。。则返回非零;

2. 如果。。。则返回零;

3. 如果。。。则返回-1.

建议避免代码写成下面这样子:

while (GetMessage( lpMsg, hWnd, 0, 0)) ...

而应该写成这样子

BOOL bRet;

while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

虽然如此,微软重定义一个类型名变成全大写也就算了,不过含义都给改了,是不是有些太那啥啦!

事已到此,下次遇上BOOL请警惕潜在的问题。


参考:

BOOL_百度百科

BOOLbool的区别- Blog @ Blog - C++博客



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值