预测输出

时间:2010-12-06 09:12:06

标签: c

void call(int x,int y,int z)
{
  printf("%d   %d  %d",x,y,z);
}
int main()
{
  int a=10;
  call(a,a++,++a);
  return 0;
}

这个程序在不同的编译器上提供不同的输出,当我在linux m / c输出上编译它时,任何原因都很奇怪。

1 个答案:

答案 0 :(得分:3)

因为行为未定义。允许编译器以任何顺序评估aa++++a,然后再将其传递给call()。 (从技术上讲,因为我们调用了未定义的行为,所以它实际上并不需要特别做任何事情;它可以编写它喜欢的任何代码。)根据它们的评估顺序,结果会有所不同。 / p>