@ Томас Мэтьюз: условные выражения считаются истинными, если они ненулевые, но стандарт C требует, чтобы сами логические операторы возвращали либо 0, либо 1.
@ Том: #define TRUE! FALSE - это плохо и совершенно бессмысленно. Если заголовочный файл попадает в скомпилированный код C ++, то это может привести к проблемам:
void foo(bool flag);
...
int flag = TRUE;
foo(flag);
Некоторые компиляторы генерируют предупреждение о преобразовании int => bool. Иногда люди избегают этого, делая:
foo(flag == TRUE);
чтобы заставить выражение быть C ++ bool. Но если вы #define TRUE! FALSE, вы получите:
foo(flag == !0);
, который в итоге выполняет сравнение типа int-to-bool, которое в любом случае может вызвать предупреждение.