【发布时间】:2020-09-23 00:38:19
【问题描述】:
为什么n++==--n 总是等于 1?以下代码给出的输出为 1。
#include <stdio.h>
int main(){
int n=10;
printf("%d\n",n++==--n);
}
无论n 是什么,输出始终为1。
【问题讨论】:
-
运算符
==生成一个布尔值,在您的情况下为true,它由printf()转换为值1。如果您尝试printf()和false,您将获得0的值 -
这是一个未定义的行为。如果您启用所有警告,编译器甚至可能会警告您。 godbolt.org/z/SuAiyk
-
@AlexLop。为什么这是未定义的行为?
-
@Lucas 因为
==没有引入序列点,因此可以先评估左侧或右侧,并且标准没有定义它 ==> 未定义的行为。 -
@Lucas 不是真的。如果您有
x + y++ - z,则基于优先级y++将首先执行,然后通过关联性(x + y) - z。==没有引入序列点,它检查双方是否相等(或不相等),无论您首先评估什么。因此,顺便说一下,在函数输出比较foo() == boo()的情况下,boo()或foo()将首先执行。你不能依赖这里的执行顺序。
标签: c post-increment pre-increment