'printf'中的后期/预增量

时间:2011-01-16 16:04:54

标签: c++ c operator-precedence

  

可能重复:
  Output of multiple post and pre increments in one statement
  Post-increment and pre-increment in 'for' loop

以下代码段

int i=0;
printf("%d %d",i++,i++);

给出输出

1 0

我能理解,但以下

int i=0;
printf("%d %d",++i,++i);

给出输出

2 2

有人能解释我第二种行为吗?

3 个答案:

答案 0 :(得分:11)

两个printfs都会调用undefined-behavior。请参阅:Undefined behavior and sequence points

引用此链接:

  

简而言之,未定义的行为意味着   守护进程可能发生任何事情   从你的鼻子飞出来   女朋友怀孕了。

对于新手:不要尝试在函数调用参数列表中修改两次或更多次的变量值。有关详细信息,请click here了解其含义。 : - )

答案 1 :(得分:3)

他们都是未定义的行为。未定义多次修改变量i。还有,C ++还是C?你需要下定决心,因为我认为预增量的行为在它们之间是不同的。

答案 2 :(得分:1)

你得到的是“未定义的行为”,因为你在序列点之间不止一次地改变了同一个变量。另一个编译器可以给你不同的结果。