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

标签 c boolean

如果变量的返回值为 0,C 编译器如何将 isOn 理解为 false?

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 理解为 null,并将所有其他数字理解为非 null?

最佳答案

在 C 语言中,整数值 0 在 boolean 上下文中使用时被视为 false,而任何非零值在 boolean 上下文中都被视为 true。

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

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

关于c - 使用枚举时,C 编译器如何将 false 理解为 false,将 true 理解为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486630/

相关文章:

java - 在 Java 中声明 boolean 变量的正确方法是什么?

复制到 C 中动态分配的数组

c - 结构分配 : segment fault 11

javascript - 测试字符串是否每个字母两侧都有 '+' 符号

c++ - 数组程序不能调用bool函数

java - Java中涉及 boolean 变量的无限while循环

c++ - 我们可以使用自定义分配器创建法线 vector<bool> 吗?

objective-c - LAN 组播是否启用?

c - 读取简单数据声明并响应分配给该变量的内存量的程序

c - 释放 C 中的文件写锁?