关于布尔类型的几个变种的解释
来源:http://www.tudoupe.com时间:2022-01-26
这个问题,一直深深地困扰着我。
我们经常看到关于布尔类型的各种定义: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》

下一篇:没有了
相关新闻
- 2022-01-25 开机显示器黑屏但电脑一直在运行
- 2022-01-23 fdtd安装过程出现问题
- 2022-01-21 win10休眠占用很大空间
- 2022-01-20 Go XP开发,以GoLand为例
- 2022-01-20 csol怎么全屏win10
- 2022-01-15 electron常见问题汇总
- 2022-01-14 【1】Python使用_1安装配置windows版
- 2022-01-13 【1】QtCreator使用_1安装配置windows版
- 2022-01-13 【1】CMake使用_1安装配置windows版
- 2022-01-10 Win11安卓子系统一直启动中怎么解决
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
