【问题标题】:why BOOLEAN of winapi uses 1 for true and 2 for false?为什么winapi的布尔值使用1表示真,2表示假?
【发布时间】:2011-10-02 08:20:35
【问题描述】:

我不知道。刚刚在我的调试窗口中看到它,来自STORAGE_DEVICE_DESCRIPTORBOOLEAN 解析为2 而不是1。我惊慌失措地认为2 意味着错误。然后我意识到它的 1 是真的。但是为什么会有这种奇怪的设计呢?或者我做错了什么?从未听说过像多字节布尔值这样的东西。 (顺便说一句,我正在使用 MinGW 和 Qt Creator IDE 的调试器)

【问题讨论】:

  • 有一个相当广泛使用的三元或三态布尔概念(truefalseundefined)。虽然这不是这里发生的事情(或者至少,我对此表示怀疑),但我想我会提到它作为对你最后陈述的回应。
  • 是的,我想称它为 Trillian,但它似乎没有流行起来。
  • undefined 对于像 Boolean 这样的原子非指针类型有多大意义?
  • 我经常需要它,例如表示一个值尚未设置,或者它应该从父级继承。但这超出了问题的范围。
  • 结构中的数据仅与将其放在那里的代码一样好。

标签: winapi types boolean


【解决方案1】:

存在许多布尔值类型的历史原因已在here 中进行了讨论。基本上任何非零值都是真,零是假。这意味着您不应该像这样进行比较:

if( x == TRUE )

但是:

if( x )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多