#include<stdio.h>
int main()
{
int i=2;
printf("%d %d\n",++i,++i);
return 0;
}
gcc上的输出为4 4。 请解释一下这个输出
答案 0 :(得分:2)
这是未定义的行为。 C标准没有定义功能参数的评估顺序。
相关章节:C99第6.5.2.2节第10段
功能指示符的评估顺序,实际 参数和实际参数中的子表达式是 未指定,但在实际调用之前有一个序列点。
同样在C99第6.5.2.2节第10段
在评估函数后有一个序列点 指定者和实际参数但在实际调用之前。一切 调用函数中的求值(包括其他函数调用) 在此之前或之后没有特别排序的 被调用函数体的执行是不确定的 关于被调用函数的执行顺序排序.94)