求高人解答:同一段程序在vc++ 6.0与turbo c运行结果不同的问题

谭浩强老师的C语言程序设计一书中有如下程序:j=5;q=(++j)+(++j)+(++j);printf("%d",q);在turboc中结果为24(同书中结果),在vc... 谭浩强老师的C语言程序设计一书中有如下程序:
j=5;q=(++j)+(++j)+(++j);printf("%d",q);
在turbo c中结果为24(同书中结果),在vc++ 6.0中结果为22。
意味着在turbo c中编译时,会将整行读完,运算3个++j之后再算q;
而VC++先运算头两个++j(第一步加法的加数),再相加,再运算第三个++j,再计算出q值。

为了测试,将程序改为
j=5;q=0+(++j)+(++j)+(++j);printf("%d",q);
结果不变,也就是说VC++依然头两个++j(头两步加法的加数)

改为 j=5;q=j+(++j)+(++j)+(++j);printf("%d",q);
在turbo c中结果为32(4个8相加),在vc++ 6.0中结果为27(6+6+7+8),此时VC++又先处理第一步加法的加数了。

完整猜测如下:
turbo c的编译方式 是将整行读完后再运算;
VC++则是分步计算,类似于用栈进行四则运算的方法,并且预读的不是第一步运算,而是头两个变量。

跪求高人从编译器的编译方式角度给予原理性的解答!
另外二级C是用TC么?程序员考试(软考)用什么环境?
从结果上我可以分析出两个编译器间的差别,希望诸位的答案能给出编译器源码上的证明!个人是因为爱好和好奇心而非过级。。。
展开
 我来答
L_o_o_n_i_e
2011-01-26 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5247万
展开全部
造成这种结果 是 C语言在 ++j 定义上 的不严密性 造成的。

q=(++j)+(++j)+(++j); 这同编译器编译时 的优化处理方式有关。

VC++ 编译 时, 若编译选项 选用 优化 /O1 或 优化 /O2 ,结果 为 24
/O1 minimize space 省空间优化
/O2 maximize speed 使运算速度最快优化
默认结果为不优化,得 22。
百度网友f7b9aa6bb
2011-01-25 · TA获得超过2250个赞
知道小有建树答主
回答量:584
采纳率:100%
帮助的人:430万
展开全部
你好!

这个问题我之前也纠结过,你可以参考下下面的介绍。
http://www.chineselinuxuniversity.net/articles/19490.shtml
我之前的那个题目是
int i = 3;
printf("%d\n", (++i) + (++i) + (++i));
printf("%d\n", i);
TC下面的答案是:15和6
VC下面的答案是:16和6
我也不太清楚原因。

另外:二级C正常情况下是用VC++6.0,软考下午的编程考试是笔试,具体可以查看网上的介绍,我记得是五道必做题(C语言),还有一道选做题(选用C++的STL或者JAVA)。

希望我的回答能对你有所帮助!
如果满意记得采纳为最佳答案哦!~
如果还有问题,可以BaiduHi我,O(∩_∩)O~!

参考资料: http://www.chineselinuxuniversity.net/articles/19490.shtml

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lsxyt321
2011-01-25 · TA获得超过510个赞
知道小有建树答主
回答量:359
采纳率:0%
帮助的人:277万
展开全部
像这样连续自增的带歧义的函数,两种编译器采取的计算方式不同,一个是先自增一个是现相加,而造成结果不同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cc3e438
2011-01-25 · 超过23用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:74.3万
展开全部
TC是以一条语令为单位编译,VC以一次计算为单位,VC中“++”不算一次计算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
duandaoke2008
2011-01-25 · 超过15用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:40.2万
展开全部
这个问题对你过级没什么太大的帮助,你可以反汇编一下看看。C标准中没有对这个做明确要求,所以不同编译器的实现是不同的。你弄明白这两个过编译器以后还可能遇到GCC之类的还是出问题,别人也看不懂你写的程序。
别弄这个了,你走弯路了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2742c9851
2011-01-25 · 超过31用户采纳过TA的回答
知道答主
回答量:156
采纳率:0%
帮助的人:110万
展开全部
语言没有对此作强制规定,如果编译器不同结果就很可能不同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式