sar*_*man 0 c undefined-behavior
可能重复:
这是未定义的C行为吗?
#include<stdio.h>
int main()
{
int a=5;
printf("%d %d %d",a++,a++,++a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
在gcc中:
7 6 8
Run Code Online (Sandbox Code Playgroud)
在TURBO C:
7 6 6
Run Code Online (Sandbox Code Playgroud)
因为函数的参数的评估顺序是未指定的,并且可能因编译器而异.编译可以从以下方式评估函数参数:
从左到右或
从右到左或
以任何其他模式.
C标准未规定此顺序.
参考:
C99标准6.5
"运算符和操作数的分组由语法表示.72除了后面指定的(对于函数调用(),&&,||,?:和逗号运算符),子表达式的评估顺序和顺序发生副作用的都是未指明的."