What is the difference between BOOL and bool?
Windows API had this type before bool
was thrown into C++. And that's why it still exits in all Windows function that take BOOL. C doesn't support bool
data-type, therefore BOOL
has to stay.
bool
is a built-in C++ type while BOOL
is a Microsoft specific type that is defined as an int
. You can find it in windef.h
:
typedef int BOOL;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
The values for a bool
are true
and false
, whereas for BOOL
you can use any int
value, though TRUE
and FALSE
macros are defined in the windef.h
header.
This means that the sizeof
operator will yield 1 for bool
(the standard states, though, that the size of bool
is implementation defined), and 4 for BOOL
.
Source: Codeguru article
To add to what luvieere has said, you can return something other than TRUE
or FALSE
from a function returning a BOOL
e.g.,
BOOL myFunc(int a)
{
if (a < 3) return FALSE;
else if (a > 3) return TRUE;
else return 2;
}
And this is possible because a BOOL
is essentially an int
.
Please note that this is not advisable as it severely destroys the general readability of code but it is something you can come across and you will be wondering why it is so.