请告诉我为什么这个条件总是成立

发布于 2024-07-27 19:58:52 字数 185 浏览 3 评论 0原文

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

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

    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

○闲身 2024-08-03 19:58:53

因为真就是假,假就是真。

Because true is false and false is true.

鲜血染红嫁衣 2024-08-03 19:58:53

无论如何,定义枚举“true”和“false”都是一个坏主意。 在 C 中,“假”为零,“真”非零……真不一定是“1”。

Defining the enums 'true' and 'false' is a bad idea anyway. In C, 'false' is zero, and 'true' is non-zero... true is not necessarily '1'.

甜心 2024-08-03 19:58:52

在本例中,枚举 true 为 0。

所以:

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

1 是真的。 因此这个条件总是为真。

The enum true is 0 in this case.

so:

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

1 is true. Thus this conditional is always true.

静赏你的温柔 2024-08-03 19:58:52

在枚举中,true 的常量值为 0,false 的常量值为 1。

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

if ( 0 == (2==3) )

if ( 0 == 0 )

这显然是正确的。

In your enumeration, true has the constant value 0, and false has the constant value 1.

In C, the result of an equality comparison (2==3) is either 0 for not equal, or 1 for equal. Your code is:

if ( 0 == (2==3) )

or

if ( 0 == 0 )

Which is clearly true.

裂开嘴轻声笑有多痛 2024-08-03 19:58:52

这是因为 Cenum 的默认起始点是 0,这恰好是 false,而不是 true。

您应该使用 enum bool {false, true} 来代替。 请不要使用令人厌恶的东西

if (x == true)
if (x == false)

。 您最好

if (x)
if (!x)

使用 truefalse 来设置布尔值,但您永远不必以这种方式测试它们。 特别是因为定义是零/非零,而不是零/一。

我一直喜欢(如果你真的必须这样做):

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

这至少保证有效。

It's because the default starting point for enums in C is 0, which happens to be false, not true.

You should use enum bool {false, true} instead. And please don't use abominations like

if (x == true)
if (x == false)

at all. You'd be better off with

if (x)
if (!x)

By all means, use true and false for setting booleans but you should never have to test them that way. Especially since the definition is zero/non-zero, not zero/one.

I've always liked (if you really have to):

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

That's at least guaranteed to work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文