enum bool{true,false};
void main()
{
if(true==(2==3))
{
printf("true\n");
}
else
{
printf("false\n");
}
return 0;
}
答案 0 :(得分:12)
在这种情况下,枚举true为0。
这样:
0 ==(2 == 3)
0 ==(0)
1
1是真的。因此,这种条件总是正确的。
答案 1 :(得分:6)
在您的枚举中,true
的常量值为0,false
的常量值为1.
在C中,相等比较(2 == 3)的结果是0表示不相等,或1表示相等。您的代码是:
if ( 0 == (2==3) )
或
if ( 0 == 0 )
这显然是正确的。
答案 2 :(得分:5)
这是因为enum
中C
的默认起点是0,这恰好是假的,不是真的。
您应该使用enum bool {false, true}
代替。请不要使用像
if (x == true)
if (x == false)
完全没有。
你会好起来的if (x)
if (!x)
无论如何,使用true
和false
来设置布尔值,但是你不应该那样测试它们。特别是因为定义为零/非零,而不是零/一。
我一直很喜欢(如果你真的需要):
#define false (1==0)
#define true (1==1)
这至少可以保证有效。
答案 3 :(得分:1)
因为true是假的,而false是真的。
答案 4 :(得分:0)
无论如何,定义枚举'true'和'false'是一个坏主意。在C中,'false'为零,'true'为非零... true不一定是'1'。