vinduer - forskel BOOL og bool?

Indlæg af Hanne Mølgaard Plasc

Problem



I VC ++ har vi datatypen 'BOOL', som kan antage værdien TRUE eller FALSE, og vi har datatype 'bool', som kan antage værdien sand eller false.


Hvad er forskellen mellem dem og hvornår skal hver datatype bruges?

Bedste reference


bool er en indbygget C ++-type, mens BOOL er en Microsoft-specifik type, der er defineret som en int. Du kan finde det i windef.h:


typedef int                 BOOL;

#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif


Værdierne for en bool er true og false, mens for BOOL kan du bruge nogen int værdi, selvom TRUE og FALSE makroer er defineret i windef.h header.


Dette betyder, at operatøren sizeof vil give 1 for bool (standardstandene, at størrelsen på bool er implementeringen defineret) og 4 for BOOL.


Kilde: Codeguruartikel [27]

Andre referencer 1


Windows API havde denne type, før bool blev smidt ind i C ++. Og det er derfor, at det stadig udgår i alle Windows-funktioner, der tager BOOL. C understøtter ikke bool datatype, derfor skal BOOL forblive.

Andre referencer 2


For at tilføje til hvad luvieere har sagt, kan du returnere noget andet end TRUE eller FALSE fra en funktion, der returnerer en BOOL, f.eks.


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


Og det er muligt, fordi en BOOL er i det væsentlige en int.


Bemærk venligst, at dette ikke er tilrådeligt, da det ødelægger kodenes generelle læsbarhed, men det er noget, du kan komme på tværs af, og du vil undre dig over hvorfor det er sådan.