今天在学习win32 API,在它的数据类型介绍文档里看到了这样一句话
BOOL is a type alias for int, distinct from C++'s bool
意思就是说,在win32 API的框架里,BOOL类型其实是int类型的“别名”,是一个伪装成bool的int。
文档里给出了这样一个例子
正确写法
if (SomeFunctionThatReturnsBoolean())
{
...
}
// or
if (SomeFunctionThatReturnsBoolean() != FALSE)
{
...
}
错误写法
if (result == TRUE) // Wrong!
{
...
}
就是说,假如你定义了一个 返回值是BOOL类型的函数,然后想要在if语句里使用这个函数,那么你写if(function()!= FALSE)
是对的,但是写if(function()==TRUE)
就是错的!
原因是这个function()的返回值表面上是bool实际上是int,它返回的值不仅限于0和1,有可能返回的值是1433223,这个时候,如果你采用if(function()!= FALSE)
的写法,那么你依然可以把这个返回值当作bool值处理,因为不管是不是bool,function()!= FALSE
这个表达式的值都是一样的,当function()
返回值不为0时,表达式的值通通是1。但是如果你采用if(function()==TRUE)
的写法,那就不一样了。
当然,这个问题只有在你使用win32api的时候才会出现,原生的C++代码是不会有这个问题的。但是,既然win32api会出现这种情况,那么当我以后使用其他平台开发的时候,会不会也出现这种情况呢?既然这样,不如现在就养成习惯,抛弃if(function()==TRUE)
的写法。