使用枚举时,C编译器如何理解false为false和true为true?

时间:2018-09-24 20:08:40

标签: c boolean

如果变量的返回值为isOn,C编译器如何将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 :(得分:1)

在C语言中,当在布尔上下文中使用整数值0时,将其视为false;而在布尔上下文中,则将任何非零值都视为true。

enum的值从0开始,如果没有特别设置,则增加,因此对于您创建的枚举,false的值为0,而true的值为的1。

在语句if (!isOn)中,!运算符更改给定表达式的布尔值,其中!0为1,给定的任何其他值为0。由于isOn的值为0,!isOn的值为1,因此if语句为true,并且打印"IS FALSE"

答案 1 :(得分:-1)

默认情况下,C编译器没有bool类型(和true / false定义)。 bool类型是在系统头文件stdbool.h中实现的,应首先包含它。

我知道,gcc编译器将truefalse实现为01定义,将Microsoft MSVC(Microsoft Visual Studio)实现为0和{ {1}}。

是的,C中的0为false,其他值为true