BOOL与bool不同
来源:互联网 发布:淘宝手机店铺名字大全 编辑:程序博客网 时间:2024/05/21 09:34
一直以来,想当然地以为,就像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_百度百科
BOOL和bool的区别- Blog @ Blog - C++博客
- BOOL与bool不同
- BOOL与bool区别
- BOOL与bool区别
- bool与BOOL
- BOOL与bool区别
- 关于BOOL与bool
- bool?与bool转化
- BOOL与bool区别
- BOOL与bool区别
- bool与BOOL
- bool 与 BOOL
- BOOL
- bool
- bool
- bool
- bool
- BOOL
- bool
- 微软等数据结构与算法面试100题 第五题
- Android控件之ScrollView(scrollbarStyle)
- http响应
- 优酷站内获取m3u8地址
- 详解Ubuntu10.10下Qt连接Mysql数据库
- BOOL与bool不同
- linux下 apt-get install 无法连接的问题
- $.getJSON的用法
- 数据集判断
- Ubuntu 默认启动到命令行 12.04
- PYTHON读写xml文件的方法
- jquery是什么?什么是jquery?
- SQL语句性能调整之ORACLE的执行计划
- 单例模式完全剖析