BOOL和bool有什么区别?

时间:2011-06-21 04:58:45

标签: windows winapi visual-c++ mfc

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

它们之间的区别是什么时候应该使用每种数据类型?

3 个答案:

答案 0 :(得分:35)

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

答案 1 :(得分:14)

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

答案 2 :(得分:10)

要添加到luvieere所说的内容,您可以从返回TRUE的函数返回FALSEBOOL以外的内容,例如

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

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

请注意,这是不可取的,因为它会严重破坏代码的一般可读性,但这是你可能遇到的问题,你会想知道为什么会如此。