我今天遇到了巫术。
语言:C
代码:
#include <stdio.h>
main()
{
int i = 5;
i = i++;
printf ("%i", i);
}
输出:
6
如何?为什么呢?
这应该是棘手的代码,但反过来说。疏忽的程序员会认为i = i++
只是简单的增量,但事实并非如此。然而它在这里工作得像。应该是5
!就像在JavaScript中一样。
应该发生什么。
i
获取5
。i++
返回5
。i
的帖子后缀为i++
(至6
)。i
获取5
的值(由i++
返回)。i
(5
)的值。但它是6
。
我无法在SO或整个互联网上找到对此的描述(只有other way around)。
这里有什么问题?
请解释。
答案 0 :(得分:11)
对于没有插入序列点的对象,多次存储是未定义的行为。
特别是,您的步骤3和4没有定义的顺序,增量(和存储)或商店可能首先发生。