c语言|关于布尔类型的几个变种的解释

c语言|关于布尔类型的几个变种的解释

文章图片


这个问题 , 一直深深地困扰着我 。
我们经常看到关于布尔类型的各种定义:BOOL VARIANT_BOOL , BOOLEAN , bool 。
为什么同样一件事情 , 要定义这么多不同的类型 。 是不是觉得这个世界不够复杂?
如果用一句话概括:因为以上的每一个类型 , 都是为了在某个时间为某一类人群解决某一种问题 。
【c语言|关于布尔类型的几个变种的解释】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》