1

可能重复:
谁能解释这些未定义的行为(i = i++ + ++i,i = i++ 等……)

我在 GCC 中尝试了这个简单的 C 程序

#include<stdio.h>
int main(){
int x=5;
printf("%d,%d,%d,%d,%d",++x,x++,x,x++,++x);
return 0;
}

输出是 9,7,7,6,6 我跟踪它并假设它会打印 6,6,7,7,9 但我发现我的假设顺序相反,怎么会!

4

1 回答 1

4

因为你的程序有未定义的行为。函数参数的计算之间没有序列点,并且在不干预序列点的情况下多次改变同一个对象是未定义的行为。

该程序只是格式错误。它不是一个有效的 C 程序。

于 2012-11-28T01:44:03.990 回答