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

gcc 上的输出是 4 4。请解释这个输出

4

1 回答 1

2

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

相关章节:C99 Section 6.5.2.2 Paragraph 10

函数指示符、实际参数和实际参数中的子表达式的求值顺序未指定,但在实际调用之前有一个顺序点。

也在 C99 第 6.5.2.2 节第 10 段

在函数指示符和实际参数的评估之后但在实际调用之前有一个序列点。调用函数(包括其他函数调用)中的每个求值,如果在被调用函数的主体执行之前或之后没有特别排序,则相对于被调用函数的执行是不确定的。94)

于 2013-07-19T04:02:24.530 回答