
文章图片
这个问题 , 一直深深地困扰着我 。
我们经常看到关于布尔类型的各种定义: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》
- 关于时间的12件事,比如为什么从三月份起要把你的钟表拨快些?
- 电子商务|关于电子商务
- 文艺辣评丨新东方直播:一场语言的行为艺术?
- c语言|负责任地推荐这3部手机,好看又配置强,用到2026年不成问题
- |从三星Note7召回事件看小米11系列关于烧WiFi售后换新政策
- 创业|说说关于网上赚钱的事,好的项目只是开始,认知差才是最重要的
- 京东|Java:有哪些快速学习Java语言的技巧?
- |PPT 的图形处理特长,恰恰可以直观地展示布尔运算原理
- 红杉资本|广州蓝景技术分享—开发语言JavaScript之多线程
- 身份证|关于文本型数字的7个应用技巧,还不掌握的,速度围观!
