还有一个i = i ++

Soo*_*ead 0 c

我今天遇到了巫术.

http://codepad.org/VW2vTpWw

语言: C

码:

#include <stdio.h>

main()
{
    int i = 5;
    i = i++;
    printf ("%i", i);
}
Run Code Online (Sandbox Code Playgroud)

输出:

6
Run Code Online (Sandbox Code Playgroud)

怎么样?为什么?

这应该是棘手的代码,但反过来说.疏忽的程序员会认为这i = i++只是简单的增量,但事实并非如此.然而它在这里工作得像.它应该是5!就像在JavaScript中一样.

应该发生什么.

  1. i得到的价值5.
  2. i++回报5.
  3. i后增加i++(到6).
  4. i获取5(返回i++)的值.
  5. i(5)的值被打印出来.

但确实如此6.

我无法在SO或整个互联网上找到对此的描述(只是相反).

什么在这里打破?

请解释.

lus*_*oog 11

对于没有插入序列点的对象,不止一次存储是未定义的行为.

特别是,您的步骤3和4没有定义的顺序,增量(和存储)或存储可能首先发生.