Possible Duplicate:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
  function parameter evaluation order




在C语言中执行函数的功能是从右到左还是从左到右?我发现它是从右到左的(执行函数意味着它按顺序传递参数)。

所以我想知道从左到右执行的c中是否有函数或内置函数的任何情况?

例:-

#include<stdio.h>
int print(int a,int b);
int main()
{
    int a=10,b=20;
    print(++a,a++);
    getch();
    return 0;
}

int print(int a,int b)
{
    printf("%d %d",a,b);
}


因此,它从右侧开始,并传递a=10而不是a++,所以现在a=11
++a,所以现在a=12比它传递a=12,因此在打印功能中它打印12 10

最佳答案

函数参数的求值顺序未指定。
c标准为实现提供了充分的自由来评估它们:


从左到右或
从右到左或
任何其他魔法命令


同样,不需要实现来指定遵循哪个顺序。



参考文献:

C99标准6.5.2.2函数调用
第10段:


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


C99标准3.19:


  未指明的行为
  在本国际标准提供两种或两种以上可能性且在任何情况下都不对选择哪种标准施加任何要求的行为。
  
  示例未指定行为的一个示例是函数的参数的顺序
  评估。

07-25 20:13