Turboc 和VC6.0 编译结果不一样

程序1:#include"stdio.h"voidmain(){inti;i=0;printf("%d\n",++i);printf("%d\n",i++);printf... 程序1:
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d\n",++i);
printf("%d\n",i++);
printf("%d\n",i);
}

程序2:
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d,%d\n",++i,i++);
printf("%d\n",i);
}

这两个程序分别用Turboc 和VC6.0 编译
程序1的结果是一样的
程序2的结果不一样
这是为什么
展开
 我来答
滴冰的水
2012-04-19 · TA获得超过1040个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:328万
展开全部
非常抱歉我不能给你完美的解答。如果非要问,这个现象只是由编译器决定的。不同的编译器,可能出来不同的结果。
依目前来看,差别应该主要出现在 printf("%d,%d\n",++i,i++);
到底是先算++i 还是先算i++,或者是到底是得到自加的值以后,再进行计算输出。

我只能告诉你几点
1.能发现这些差别,是值得肯定的
2.试图研究这些差别,是没有必要的,因为编译器也是别人写的程序,那么程序必定有他的设计思想,那就要允许不同的编译器设计思想不同,所以同一个问题出现不同的结果
3.尽量少用printf,初级阶段调试可以用,后面你会发现,这个函数没啥好处
sxt19840210
2012-04-19 · TA获得超过1517个赞
知道小有建树答主
回答量:751
采纳率:0%
帮助的人:802万
展开全部
程序编译顺序不一样,TC中是标准顺序,VC中顺序不标准
VC中同级别的数据处理是从右向左处理的,而标准是从左向又的
比如说a=b+c+d+e;在VC中就是先算d+e,然后c+(d+e),然后再b+(c+(d+e))
标准应该从左向右依次计算
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Negamax
2012-04-19 · TA获得超过2723个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:293万
展开全部
是的,不同的编译器在处理和实现 i++,++i多个连在一起的时候都是不一样的。
我们只要弄懂++i与i++的区别,以及常见的运算符号的优先级就可以了

不要太去抠这些东西,否则很难受的。

例如:负数与负数的求余,负数有小数的和负数有小数的求余。C,VB,JAVA,C#,Javascript,Go等多种语言都是不大同一的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
周青教主
2012-04-19
知道答主
回答量:8
采纳率:0%
帮助的人:1.3万
展开全部
是因为两者的调用约定不一样。C语言是cdecall,VC是stacall,两者的参数压栈方式不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式