请告诉我为什么这种情况总是如此

时间:2009-07-16 05:50:40

标签: c enums

enum bool{true,false};
void main()
{
    if(true==(2==3))
    {
        printf("true\n");
    }
    else
    {
        printf("false\n");
    }

    return 0;
}

5 个答案:

答案 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)

这是因为enumC的默认起点是0,这恰好是假的,不是真的。

您应该使用enum bool {false, true}代替。请不要使用像

这样的可憎之物
if (x == true)
if (x == false)

完全没有。

你会好起来的
if (x)
if (!x)

无论如何,使用truefalse来设置布尔值,但是你不应该那样测试它们。特别是因为定义为零/非零,而不是零/一。

我一直很喜欢(如果你真的需要):

#define false (1==0)
#define true  (1==1)

这至少可以保证有效。

答案 3 :(得分:1)

因为true是假的,而false是真的。

答案 4 :(得分:0)

无论如何,定义枚举'true'和'false'是一个坏主意。在C中,'false'为零,'true'为非零... true不一定是'1'。