【问题标题】:What is the difference between BOOL and bool?BOOL 和 bool 有什么区别?
【发布时间】:2011-09-19 05:11:30
【问题描述】:

在 VC++ 中,我们有数据类型“BOOL”,它可以假设值为 TRUE 或 FALSE,我们有数据类型“bool”,它可以假设值为 true 或 false。

它们有什么区别,什么时候应该使用每种数据类型?

【问题讨论】:

    标签: windows winapi visual-c++ mfc


    【解决方案1】:

    bool 被投入 C++ 之前,Windows API 就有这种类型。这就是为什么它仍然存在于所有采用 BOOL 的 Windows 函数中的原因。 C 不支持bool 数据类型,因此BOOL 必须保留。

    【讨论】:

    • C99 标准确实包含 bool 类型,尽管大多数 C 编译器直到最近才支持 bool 是事实。
    • 如果你想要标准 C 中类似 C++ 的布尔值,#include
    【解决方案2】:

    bool 是内置 C++ 类型,而 BOOL 是 Microsoft 特定类型,定义为 int。你可以在windef.h找到它:

    typedef int                 BOOL;
    
    #ifndef FALSE
    #define FALSE               0
    #endif
    
    #ifndef TRUE
    #define TRUE                1
    #endif
    

    bool 的值为truefalse,而BOOL 可以使用任何int 值,尽管TRUEFALSE 宏在windef.h 标头中定义.

    这意味着sizeof 运算符将为bool 产生1(尽管标准规定bool 的大小是实现定义的),为BOOL 产生4。

    来源:Codeguru article

    【讨论】:

    • sizeof(BOOL) 在 64 位 Windows 机器上仍为 4。将自身与编译器类型实现隔离是这些 typedef 存在的原因。
    • @Hans 删除了 64 位引用。
    • 警告:在 microsoft c++ 中未指定 sizeof(bool),并且在 c++ 4.2 和 5.0 之间从 4 个字节更改为 1 个字节(请参阅msdn.microsoft.com/en-US/en-use/library/tf4dy80a.aspx
    【解决方案3】:

    为了补充 luvieere 所说的,您可以从返回 BOOL 的函数中返回 TRUEFALSE 以外的其他内容,例如,

    BOOL myFunc(int a)
    {
        if (a < 3) return FALSE;
        else if (a > 3) return TRUE;
        else return 2;
    }
    

    这是可能的,因为BOOL 本质上是int

    请注意,这是不可取的,因为它严重破坏了代码的一般可读性,但您可能会遇到这种情况,您会想知道为什么会这样。

    【讨论】:

    • +1 指出这是一个非常糟糕的主意。使用 BOOL 的全部原因是将值限制为 TRUE/FALSE;如果你想要int,你应该使用int
    • 许多(但不是全部)Windows API 函数将任何非零BOOL 视为TRUE。因为这种行为不一致,所以您应该始终明确地使用TRUE(即1)而不是非零。这可能很棘手,因为some languagesTrue 定义为所有位集(-1 用于有符号整数)
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2016-07-21
    • 2011-06-12
    • 2018-08-29
    相关资源
    最近更新 更多