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

0 c enums

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*ose 12

在这种情况下,枚举true为0.

所以:

0 ==(2 == 3)
0 ==(0)
1

1是真的.因此,这种条件总是正确的.


Sam*_*ell 6

在枚举中,true常量值为0,并且false常量值为1.

在C中,相等比较(2 == 3)的结果是0表示不相等,或1表示相等.你的代码是:

if ( 0 == (2==3) )
Run Code Online (Sandbox Code Playgroud)

要么

if ( 0 == 0 )
Run Code Online (Sandbox Code Playgroud)

这显然是真的.


pax*_*blo 5

这是因为enums in 的默认起点C是0,这恰好是假的,不是真的.

你应该使用enum bool {false, true}.请不要使用像这样的可憎之物

if (x == true)
if (x == false)
Run Code Online (Sandbox Code Playgroud)

一点都不 你会好起来的

if (x)
if (!x)
Run Code Online (Sandbox Code Playgroud)

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

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

#define false (1==0)
#define true  (1==1)
Run Code Online (Sandbox Code Playgroud)

这至少可以保证有效.