还有一个i = i ++

时间:2013-05-12 20:00:18

标签: c

我今天遇到了巫术。

http://codepad.org/VW2vTpWw

语言:C

代码:

#include <stdio.h>

main()
{
    int i = 5;
    i = i++;
    printf ("%i", i);
}

输出:

6

如何?为什么呢?

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

应该发生什么。

  1. i获取5
  2. 的值
  3. i++返回5
  4. i的帖子后缀为i++(至6)。
  5. i获取5的值(由i++返回)。
  6. 打印i5)的值。
  7. 但它是6

    我无法在SO或整个互联网上找到对此的描述(只有other way around)。

    这里有什么问题?

    请解释。

1 个答案:

答案 0 :(得分:11)

对于没有插入序列点的对象,多次存储是未定义的行为。

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