C не имел выделенного логического типа до стандарта 1999 года - любой скаляр с ненулевым значением считался «истинным», а нулевое значение - «ложным». Общепринятым соглашением было использование макросов и / или typedef для создания логических значений:
#define BOOL int
#define TRUE (1)
#define FALSE (0)
или
typedef int bool;
static const bool true = 1;
static const bool false = 0;
или что-то подобное.
Итак, вы просматриваете либо старый (до C99) код C, либо код, написанный кем-то, кто изучил C до выхода этого стандарта.
Обратите внимание, что C по-прежнему считает любое ненулевое скалярное значение "истинным", а управляющие выражения в операторах if
и for
и while/do while
не обязательно должны иметь булевы типы , Так как он был получен из C, то же самое верно и для C ++, хотя он также имеет выделенные логические типы и операторы.