<分区>
当我用 gcc 编译这段代码并运行时
int a=1;
printf("%d",(a=a+1)+(a=a+1)+(a=a+1));
我期望结果是 2+3+4=9,但输出是 10。
我知道 (++a)+(++a)+(++a)
中存在未定义的行为,因为三个 ++
副作用可以在评估所有 (++a) 之前运行。
但我认为 a=a+1
的值正是赋值求值后 a
的值。所以编译器不能先处理三个a=a+1
,然后把变量a
中的值作为a=a+1
的值所有 a=a+1
均已评估。
我想知道按照c标准哪里错了。