关于布尔类型的几个变种的解释
这个问题,也一直深深地困扰着我。
我们经常看到关于布尔类型的各种定义:BOOL, VARIANT_BOOL,BOOLEAN,以及bool。
为什么同样一件事情,要定义这么多不同的类型。是不是觉得这个世界不够复杂?
如果用一句话概括:因为以上的每一个类型,都是为了在某个时间为某一类人群解决某一种问题。
BOOL是最为古老的类型,它的定义很简单:typedef int BOOL;
在C语言中,使用到了int来表达一个布尔类型。在Windows 1.0那个时候,C语言是用于系统编程的热门语言。
接下来是BOOLEAN。它的定义为:typedef BYTE BOOLEAN;
这个类型由OS/2 NT开发团队所创造,主要是为了重新从零开始开发一个全新的操作系统。
我们可以从这个类型的设计中,窥视原始Windows NT的设计,例如安全子系统和与驱动程序的交互。
接下来是VARIANT_BOOL,如下图所示:
这个类型主要是由Visual Basic语言开发者开发的。在VB中使用了-1来表达”true”,而使用0来表达”false”,VARIANT_BOOL类型就是用来实现这种定义。
常见的错误
当操作VT_BOOL类型的VARIANT变量时,如果你想将它设置为布尔值true,则你必须将它设置为VARIANT_TRUE。许多人都会错误地将它设置为TRUE或者true,但是它和VARIANT_TRUE不是一回事儿。如果你在脚本语言环境中这样使用,则调用方会感到困惑。
(类似的,你还应该使用VARIANT_FALSE而不是 FALSE 或 false。但在这种情况下,这三个名称都具有相同的数值。因此,操作布尔值“false”的时候,问题不是很大。)
最后是bool。这个是C++里的数据类型,它的值可以是true或者false。但是在Win32中,你可能不会经常看到它,因为Win32在设计上会考虑尽量和C语言保持兼容。
另外需要注意的是,我们所说的C语言兼容和C语言友好不是一回事儿。尽管你可以在C中开发COM组件,但是,相信我,这并不是一件好玩的事儿。
总结
反正,今天终于算是搞明白了各种布尔类型,妈妈再也不用担心了。
要是从一开始,布尔true统一使用数字1,布尔false统一使用数字0,世界该多美好。
在拓扑梅尔智慧办公平台(Topomel Box)中,我就一股脑的使用数字1和0来表达布尔类型的语义,世界瞬间就清净了。
咱弄简单点儿,它不香吗?
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
- 下一篇: 是否需要手动释放一次性定时器?
- 上一篇: 一则轶事:对更快的系统调用陷阱的追求
相关推荐
- 浅谈更糟糕的 CS_CLASSDC 标志位的作用
- Posted on 08月19日
- VS2019 v16.9 预览版3:MSVC后端更新汇总
- Posted on 01月23日
- Topomel Box 8 小时长运测试顺利完成
- Posted on 11月11日
- 滚动条第12章节: 在我们的例子程序中添加WM_NCCALCSIZE消息
- Posted on 04月27日
评论已关闭。