What is the difference between BOOL and bool?

40,878

Solution 1

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

Solution 2

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.

Solution 3

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.

Share:
40,878
Umesha MS
Author by

Umesha MS

Updated on July 09, 2022

Comments

  • Umesha MS
    Umesha MS almost 2 years

    In VC++ we have the data type “BOOL” which can assume the value TRUE or FALSE, and we have the data type “bool”, which can assume the value true or false.

    What is the difference between them and when should each data type be used?

  • user1703401
    user1703401 almost 13 years
    sizeof(BOOL) is still 4 on a 64-bit Windows machine. Isolating itself from the compiler type implementations is the reason these typedefs exist.
  • luvieere
    luvieere almost 13 years
    @Hans Removed the 64-bit reference.
  • Mark Ransom
    Mark Ransom almost 13 years
    +1 for pointing out that this is a really bad idea. The whole reason to use BOOL is to restrict the values to TRUE/FALSE; if you want int you should use int.
  • eFloh
    eFloh about 10 years
    WARNING: sizeof(bool) is not specified in microsoft c++ and changed from 4 bytes to 1 byte between c++ 4.2 and 5.0 (see msdn.microsoft.com/en-US/en-use/library/tf4dy80a.aspx)
  • PeterAllenWebb
    PeterAllenWebb about 9 years
    The C99 standard does include a bool type, though it's definitely true that most C compilers did not support bool until relatively recently.
  • Marc Durdin
    Marc Durdin over 3 years
    Many (but not all) Windows API functions treat any non-zero BOOL as TRUE. Because this behaviour is not consistent, you should always explicitly use TRUE (i.e. 1) and not non-zero. This can be tricky because some languages define True as all bits set (-1 for signed integers)
  • Turret
    Turret about 3 years
    If you want the C++ like bools in Standard C, #include <stdbool.h>