Как компилятор C может понимать false как false и true как true при использовании enum? - PullRequest
0 голосов
/ 24 сентября 2018

Как компилятор C может понимать isOn как ложное, если возвращаемое значение переменной 0?

enum bool { false, true };

typedef enum bool boolean;

int main()
{
    boolean isOn = false;
    printf("%d\n", isOn);
    if(!isOn)
        printf("IS FALSE");
    return 0;
}

Может ли C понимать 0 как ноль, а все остальные числа как ненуль

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

По умолчанию компилятор C не имеет типа bool (и определений true / false).Тип bool реализован в системном заголовке stdbool.h, вы должны сначала включить его.

Как я знаю, компилятор gcc реализует true и false как 0 и 1 определяет, Microsoft MSVC (Microsoft Visual Studio) как 0 и 204.

И да, 0 в C ложно, а другое значение истинно

0 голосов
/ 24 сентября 2018

В C целочисленное значение 0 считается ложным, когда используется в логическом контексте, тогда как любое ненулевое значение считается истинным в логическом контексте.

Значения enum начинаются с 0 иувеличить, если не указано иное, поэтому для созданного вами перечисления false имеет значение 0, тогда как true имеет значение 1.

В операторе if (!isOn), !оператор изменяет логическое значение данного выражения, с !0, равным 1, и любым другим заданным значением, равным 0.Поскольку isOn имеет значение 0, !isOn имеет значение 1, поэтому оператор if имеет значение true и печатается "IS FALSE".

...