代码: 全选
int i = 0, arr[8];
while(i<8){
arr[i++] = 2*i;
}
比如, arr[i-2]我用不同的compiler得到不同的结果, 有12和14
谢谢啊. 我没学过C, 而cpp是自学的, 仅仅是用哪些看哪些. 在别的地方问过, 有人给的答案是不同的编辑器优化程度不一样, 所以影响了结果.astolia 写了:这个问题的本质原因是
arr[i++] = 2*i;
这一句中,2*i涉及到对i的一次读取,而i++涉及到对i的一次读和一次写。
而2*i的读和i++的读写操作相对独立,具体的执行顺序C语言是没有规定的,属于未定义行为。对于存在未定义行为的代码,就不要指望不同编译器能得到一致结果。
关于未定义行为,这篇讲的比较详细
http://www.cnblogs.com/jiayouwyhit/p/3147557.html
这也是谭浩强C教程的重大硬伤之一