如果变量的返回值为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
理解为空,而所有其他数字都理解为非空?
答案 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编译器将true
和false
实现为0
和1
定义,将Microsoft MSVC(Microsoft Visual Studio)实现为0
和{ {1}}。
是的,C中的0为false,其他值为true