bool vs. BOOL
whoho 2004-09-15 09:31:39 因为用Visual C++编译器,没有办法,现在不得不碰到它的历史性BOOL问题
我感兴趣的是他们的兼容性在多大程度上会失败?
之前我曾经碰到一个问题:一个Windows API需要一个BOOL变量,而我的同事
在需要表达“真”的时候,就传了一个非1的整数给他(其实是指针)
结果API罢工了,后来我追踪了半天,总算用了个 exp?TRUE:FALSE
总算才过去了
从API的层面来说,有些东西要兼顾二进制的兼容性,保留BOOL宏当然必要,
毕竟不是所有人都用C++编程,但我比较反感的是,C++标准出来这么久了,
MFC中还大量存在着BOOL。这样混杂的局面非常造成一些潜藏的错误。难道MFC
就不能在包装的时候稍微变化一下?
可能一方面的原因是考虑对已有程序的影响,但是至少有一个事实可以注意到:
从BOOL(其实就是int)可以直接转换为bool(windows.h中TRUE==1, FALSE==0),
本来为BOOL的地方,几乎总可以不加修改就过去了
另外一个可能由于BOOL是一个32位机器字长,BOOL访问会比bool快一些
但从一致性来说,BOOL却远远不如:本来TRUE==1才是真,但是如果我不小心
放了个非0非1,在某些地方,就是个灾难,因为BOOL只是个别名,没有类型检查
不像bool,即使1999也能变为true
从我来说,恼火是一方面,另外可能对这个问题有许多都不太了解
敬请发表高见!分不多,共同学习