C中带前缀运算符的未定义输出

时间:2013-07-19 03:59:04

标签: c prefix-operator

#include<stdio.h>
int main()
{
 int i=2;
 printf("%d %d\n",++i,++i);
 return 0;
}

gcc上的输出为4 4。 请解释一下这个输出

1 个答案:

答案 0 :(得分:2)

这是未定义的行为。 C标准没有定义功能参数的评估顺序。

相关章节:C99第6.5.2.2节第10段

  

功能指示符的评估顺序,实际   参数和实际参数中的子表达式是   未指定,但在实际调用之前有一个序列点。

同样在C99第6.5.2.2节第10段

  

在评估函数后有一个序列点   指定者和实际参数但在实际调用之前。一切   调用函数中的求值(包括其他函数调用)   在此之前或之后没有特别排序的   被调用函数体的执行是不确定的   关于被调用函数的执行顺序排序.94)