gcc编译器printf执行顺序

时间:2013-11-11 17:39:07

标签: c gcc printf

对于测试代码如下:

#include <stdio.h>
int addTen(int x, int b[])
{
  b[2] =  x + b[2];
  return b[2];
}
void main(void)
{
   int a[3] = {4,5,6};
   int i = 2;
   printf("%i %i %i \n", a[i], addTen(10,a), a[i]);
}

为什么输出是16,16,6?我知道即使编译器从右到左处理顺序,如[i]&lt; - addTen(10,a)&lt; -a [i]。在调用addTen(10,a)之后,a [i]已经是16(而不是6)。那么为什么输出不是16,16,16?谢谢!

2 个答案:

答案 0 :(得分:4)

未定义的行为 ,您应该阅读sequence points。您正在修改a并同时在同一表达式中阅读它。

此外,评估顺序未定义。

答案 1 :(得分:4)

没有定义用于评估参数的顺序。编译器可以按任何顺序自由地评估参数,并且通常会选择最方便的顺序。因此,您无法定义任何预期的输出。