关于布尔类型的几个变种的解释

关于布尔类型的几个变种的解释

作者:BlogUpdater |  时间:2022-01-26 |  浏览:1187 |  评论已关闭 条评论

这个问题,也一直深深地困扰着我。
我们经常看到关于布尔类型的各种定义: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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。