请告诉我为什么这个条件总是成立
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
因为真就是假,假就是真。
Because true is false and false is true.
无论如何,定义枚举“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'.
在本例中,枚举 true 为 0。
所以:
1 是真的。 因此这个条件总是为真。
The enum true is 0 in this case.
so:
1 is true. Thus this conditional is always true.
在枚举中,
true
的常量值为 0,false
的常量值为 1。在 C 中,相等比较 (2==3) 的结果是0 表示不等于,1 表示等于。 您的代码是:
或
这显然是正确的。
In your enumeration,
true
has the constant value 0, andfalse
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:
or
Which is clearly true.
这是因为
C
中enum
的默认起始点是 0,这恰好是 false,而不是 true。您应该使用
enum bool {false, true}
来代替。 请不要使用令人厌恶的东西。 您最好
使用
true
和false
来设置布尔值,但您永远不必以这种方式测试它们。 特别是因为定义是零/非零,而不是零/一。我一直喜欢(如果你真的必须这样做):
这至少保证有效。
It's because the default starting point for
enum
s inC
is 0, which happens to be false, not true.You should use
enum bool {false, true}
instead. And please don't use abominations likeat all. You'd be better off with
By all means, use
true
andfalse
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):
That's at least guaranteed to work.