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输出上编译它时,任何原因都很奇怪。
答案 0 :(得分:3)
因为行为未定义。允许编译器以任何顺序评估a
,a++
和++a
,然后再将其传递给call()
。 (从技术上讲,因为我们调用了未定义的行为,所以它实际上并不需要特别做任何事情;它可以编写它喜欢的任何代码。)根据它们的评估顺序,结果会有所不同。 / p>