可能重复:
Order of evaluation in C++ function parameters
Parameter evaluation order before a function calling in C请解释此行为?
:~/work_space/cprogs$ !cat
cat expression_associativity.c
#include<stdio.h>
int main()
{
int i = 0;
printf("\n no-incr:%d pre-incr:%d post-incr:%d no-incr:%d post-incr:%d no-incr:%d \n", i, ++i, i++, i, i++, i);
return 0;
}
:~/work_space/cprogs$ !./
./expression_associativity
no-incr:3 pre-incr:3 post-incr:1 ***no-incr:3*** post-incr:0 ***no-incr:3***
:~/work_space/cprogs$
为什么最后和中间的 “无增量” 的值被印刷为3?我期待最后一次“不加入”为零,中间的“不加入”为1.
有人可以解释表达式的顺序是什么,为什么我们看到这个值?
它实际上是“未指定”,与“未定义”明显不同。 – cnicutar
@cnicutar:我的答案已经表明它是未指定的,在这种情况下未指定的行为会导致未定义的行为。 –
必须看到早期版本 – cnicutar