Pourquoi BOOL dans Windows est de type int?

Pourquoi ne pas définir BOOL comme une enum comme dans:

 enum BOOL {FALSE, TRUE}; 

Y a-t-il une raison pour laquelle BOOL doit être spécifié explicitement comme int (ou tout autre type d’intégrale)?

De l’article de blog de Raymond Chen sur ce sujet:

BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool

Encore plus de façons de dire la même chose. Pourquoi autant?

Parce que chacun a été inventé par différentes personnes à différents moments pour résoudre différents problèmes.

BOOL est le plus ancien . Sa définition est simplement

typedef int BOOL;

Le langage de programmation C utilise “int” comme type booléen, et Windows 1.0 a été écrit à l’époque, alors que C était le langage génial pour la programmation système .

La grande majorité de l’API Win32 est toujours conçue pour le C à ce jour, de sorte qu’elle est compatible avec une grande variété de langages de programmation compatibles avec le C.

Les énumérations ont des problèmes de portabilité entre les compilateurs, liés aux différences de taille en octets et de représentation en bits. De plus, enum n’a été ajouté à C que jusqu’à ANSI C en 1989 (alias C98), après trois versions de Windows (1.0 en 1985, 2.0 en 1987 et 2.1 en 1988), et les énumérations sont de toute façon équivalentes aux entiers.

La raison en est que C n’avait à l’origine aucun type bool. Selon la spécification du langage C, toute valeur intégrale non nulle est évaluée à true et 0 à false. Le typedef BOOL a été ajouté ultérieurement par Microsoft pour la programmation de Windows. L’énumération serait toujours évaluée sous les couvertures à 0 et 1 (ou autre chose en fonction de la machine).