C语言下的同样程序,在linux gcc下和在dev c++下运行的结果不同,求解:

win7X32devc++下:#include<stdio.h>#include<stdlib.h>intmain(){inti=3;printf("%d,%d,%d,%... win7 X32 dev c++ 下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=3;
printf("%d,%d,%d,%d,%d,%d,%d\n",i++,++i,i--,--i,i--,i--,i+5);
printf("%d\n",i);
printf("%d\n",i);
system("pause");
return 0;
}
结果为:
0,0,0,0,2,3,8
1
1
请按任意键继续. . .

centos 6.4 x64 GCC
#include <stdio.h>
int main()
{
int i=3;
printf("%d,%d,%d,%d,%d,%d,%d\n",i++,++i,i--,--i,i--,i--,i+5);
printf("%d\n",i);
printf("%d\n\n",i);
return 0;
}
结果:
[root@localhost ~]# ./a.out
0,1,0,1,2,3,8
1
1
展开
 我来答
宇哥受命于天
2013-11-06 · TA获得超过446个赞
知道小有建树答主
回答量:111
采纳率:50%
帮助的人:43.6万
展开全部
Dev-C++是windows上的一个IDE,gcc是DevC++默认使用的编译器
也就是说,gcc是内核,DevC++是外壳.
C/C++语言没有规定具体压栈顺序,没有标准化时C语言支持没有固定参数的函数,所以为了实现这个当时多数编译器都采用从右往左压栈,但是标准化的要求至少有一个固定参数,这个限制就没有必要了。不过从右到左几乎已经成为了C编译器惯用的顺序。C++的_stdcall方式也是采用从右到左,不同的只是不需要调用者自己手动清栈。
另外求值顺序和压栈顺序是两回事,C语言里几乎没有对求值顺序做规定,编译器完全可以先求出值再决定如何压栈。
所以是编译器的压栈问题
百度网友10c6f4b
2013-11-06 · TA获得超过613个赞
知道小有建树答主
回答量:1083
采纳率:100%
帮助的人:202万
展开全部
printf("%d,%d,%d,%d,%d,%d,%d\n",i++,++i,i--,--i,i--,i--,i+5);

C标准规定是未定义的行为,编译器爱怎么实现 就怎么实现 。
此种代码没有任何意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-06
展开全部
printf是从后开始计算,放入缓冲流,然后倒着输出,所以前面的反而更大,分开写就不会了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weidong3630
2013-11-06 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:322
采纳率:28%
帮助的人:79.8万
展开全部
看看这个吧。这个问题跟编译器有关,如果不想深究,也没关系的。
http://www.360doc.com/content/11/0824/12/3398926_142890977.shtml
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式