Я как-то никогда не задумывался над тем, что лучше использовать BOOL или BOOLEAN? Конечно же, BOOL — это и короче и во всех учебниках по Windows встречается именно BOOL. Как бы не так! Буквально вчера я битый час занимался поиском ошибки там, где ее не должно было быть.
Оказалось, что единственно истинный тип, впрямую связанный с типом bool, который определен стандартами языка С++, это именно BOOLEAN. А BOOL это не что иное, как «typedef int BOOL;» и находится в windows.h (точнее в WinDef.h, но это неважно)
Рассмотрим подробнее исходный код функции, сравнивающий два числа:
#include <stdio.h>
#include <windows.h>
bool CompareInt(int i1, int i2)
{
if (i1==i2)
return true; //UPD1: было TRUE
else
return false; //UPD1: было FALSE
}
typedef BOOL (*CallBack)(int, int);
void main(void)
{
CallBack IsEqual = (CallBack)CompareInt;
if ( !IsEqual(0x1234, 0x5678) )
printf("Not equals");
else
printf("Equals");
}
После компилирования Visual Studio и запуска, имеем: Equals
Тогда поменяем BOOL на BOOLEAN:
typedef BOOLEAN (*CallBack)(int, int);
Компилируем, запускаем, получаем: Not equals (что и должно было получиться с самого начала)
Вывод: никогда не пользуйтесь BOOL, только BOOLEAN.