当前位置: 代码迷 >> C语言 >> [求助]gcc 4.1.1版与 gcc 3.4.4版,编译出不同结果。不知道gcc4.1.1是如何编 ...
  详细解决方案

[求助]gcc 4.1.1版与 gcc 3.4.4版,编译出不同结果。不知道gcc4.1.1是如何编 ...

热度:522   发布时间:2007-11-15 12:37:50.0
[求助]gcc 4.1.1版与 gcc 3.4.4版,编译出不同结果。不知道gcc4.1.1是如何编译。
main ()
{
int a=8;
printf("%d\t%d\t%d\n",++a,--a,a--);
int x=8;
printf("%d\t%d\n",++x,++x);
int i=8;
printf("%d\t%d\t%d\t%d\t%d\n",i--,--i,--i,i--,i++);
}

以上程序如果在gcc3.4.4版本下编译,结果就是我们认为正常的:
7 6 8
10 9
6 6 7 9 8
可是,如果在gcc4.1.1版本下编译,结果就是我们想不到的结果:
7 7 8
10 10
6 5 5 9 8
不知道为什么这两个编译器差这么多,gcc4.1.1是根据什么来编译以上代码呢?在3.4.4版>本上,我们知道他的从右往左计算的,可到了gcc4.1.1里面好像即不是从右往左算也不是从
左往右算,请高手赐教,谢谢。

搜索更多相关的解决方案: gcc  编译  结果  

----------------解决方案--------------------------------------------------------
怎么没人回复,难道大家都没发现这个问题?
----------------解决方案--------------------------------------------------------

高手来指点啊,让我也学习学习!


----------------解决方案--------------------------------------------------------
完全没有必要挖掘这个,好好学习算法和数据结构是关键,抠这个没有用(不同的编译器甚至不同版本的编译器的结果是不同的)
----------------解决方案--------------------------------------------------------
我们应该搞明白他的结果是怎么出来的吧?要不然怎么写代码?
----------------解决方案--------------------------------------------------------
我相信不会为了减少一点代码量而采用
printf(" ...",i++,++a);
这种方式,完全可以使用i=i+1; a+=1; 然后printf("...",i,a);
朴实的代码+完美的算法远远好于华丽的代码+漏洞百出效率低下的算法
而且如果采用您的方法,那岂不是您的代码会"养"成编译器依赖,在其它编译器下出现很大的错误或问题?
----------------解决方案--------------------------------------------------------
有道理!要我写也不会写出这样的代码来!
----------------解决方案--------------------------------------------------------
如果在实际的工程中,我相信没人会写出这样的代码,我也不会。
现在我只是想知道这个gcc4.1.1是依什么样的规律来计算上面的代码的,只不过是想知道以上代码在GCC4.1.1里面的计算方向是什么样的,或是他的结果是怎么出来的,不知道有高手知道吗,谢谢。
(实际工程中,我也不会写出那样的代码,要不然我自己都会晕。。。虽然不会写出那样的代码,但是他的道还是应该弄明白的。)

----------------解决方案--------------------------------------------------------