文章图片
这个问题 , 一直深深地困扰着我 。
我们经常看到关于布尔类型的各种定义: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》
- 厦门|关于虚拟主机公司商业模式的变化所需知道的一切
- MySQL|关于芯片行业的三个基础问题
- 荔枝集团中国青年2021互联网音频收听报告发布 文学语言学习成
- 芯片|关于麒麟芯片,华为终于做出了决定!外媒:这意味着火力全开了
- 本文转自:玉林晚报关于我们制图:玉林日报全媒体记者 黄嘉琳值班编辑:梁远帆玉林日报社全媒...|2021年,玉林做了啥?2022年,我们要做啥?一张图告诉
- 半导体|江苏华林科纳半导体关于硝酸浓度对硅晶片腐蚀速率的影响报告
- 苹果|关于手机系统,我更倾向于使用苹果系统,因为让人省心
- 项目组|全球传播服务平台已交付 28种语言向世界介绍北京冬奥会
- 伊斯坦布尔迎降雪
- 关于元宇宙+城市设计专家们在线为近3000名观众分享了这些观点