BOOL与bool,不是一家人

来源:互联网 发布:php用什么软件开发 编辑:程序博客网 时间:2024/06/08 20:05
在VisualStudio,经常有很多BOOL和bool穿梭在代码中,而这大小写的细微差异,却导致他们的实质不一样了。我们先来分析下面这个例子:
程序如下:......CFileFind finder;bool bWorking =finder.FindFile("c:\\文件.txt");......编译提示:warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
查询MSDN CFileFind::FindFile (MFC):virtual BOOL FindFile( LPCTSTR pstrName = NULL, DWORD dwUnused = 0 ); 你会发现FindFile函数的返回值是BOOL类型,却不是bool类型,因此把代码中的bool改为BOOL即可解决。可为什么会出现这样的情况呢?其实,BOOL类型在windef.h头文件中被定义,typedef int BOOL,其实际类型为int。在<wtypes.h>中,typedef long BOOL。而bool是标准C++数据类型。换句话说,BOOL其实就是int型变量,与布尔型bool没有什么关系。 在这里,函数返回了一个int类型的值,如果我们使用bool类型来接收,那么编译器当然会提示错误。

区别的详细比较

  1. 类型不同:bool是基本数据类型,BOOL被定义为基本数据类型int
  2. 长度不同:bool只占一个字节,BOOL长度视实际环境来定,一般可认为是4个字节
  3. 取值不同:bool取值false和true,BOOL是一个三值逻辑(TRUE/FALSE/ERROR)
bool是标准C++数据类型,可取值true和false。单独占一个字节, 如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。BOOL是一个三值逻辑,TRUE/FALSE/ERROR,分别被宏定义为1/0/-1(#define)。Win32 API中很多返回值为BOOL的函数都是三值逻辑。

C99新增类型 _Bool

C99把C语言原生的布尔类型带来了,同时增添的关键字还有_Complex,_Imaginary等。这里我也不去研究了,有兴趣的朋友可以查看百科。
1 0
原创粉丝点击