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

谭浩强老师的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么?程序员考试(软考)用什么环境?
从结果上我可以分析出两个编译器间的差别,希望诸位的答案能给出编译器源码上的证明!个人是因为爱好和好奇心而非过级。。。

造成这种结果 是 C语言在 ++j 定义上 的不严密性 造成的。

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

VC++ 编译 时, 若编译选项 选用 优化 /O1 或 优化 /O2 ,结果 为 24
/O1 minimize space 省空间优化
/O2 maximize speed 使运算速度最快优化
默认结果为不优化,得 22。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-25
你好!

这个问题我之前也纠结过,你可以参考下下面的介绍。
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

第2个回答  2011-01-25
像这样连续自增的带歧义的函数,两种编译器采取的计算方式不同,一个是先自增一个是现相加,而造成结果不同。
第3个回答  2011-01-25
TC是以一条语令为单位编译,VC以一次计算为单位,VC中“++”不算一次计算。
第4个回答  2011-01-25
这个问题对你过级没什么太大的帮助,你可以反汇编一下看看。C标准中没有对这个做明确要求,所以不同编译器的实现是不同的。你弄明白这两个过编译器以后还可能遇到GCC之类的还是出问题,别人也看不懂你写的程序。
别弄这个了,你走弯路了。
第5个回答  2011-01-25
语言没有对此作强制规定,如果编译器不同结果就很可能不同。

求高人解答:同一段程序在vc++ 6.0与turbo c运行结果不同的问题
造成这种结果 是 C语言在 ++j 定义上 的不严密性 造成的。q=(++j)+(++j)+(++j); 这同编译器编译时 的优化处理方式有关。VC++ 编译 时, 若编译选项 选用 优化 \/O1 或 优化 \/O2 ,结果 为 24 \/O1 minimize space 省空间优化 \/O2 maximize speed 使运算速度最快优化 默认结果为...

为什么turboc与vc++6.0运行结果不一样
虽然 c++与c 不同 但是 c++能识别c的语法 所以你说的情况不会出现 我用vc++6.0 帮你运算过了 没有出错的 建议你换个 vc++

为什么VC6.0 与Turboc2.0运行结果不一样
有的编译器是从左往右解释,那就是 655,从右往左解释就是 555。老谭的 C 语言书中已经说明了这个问题,并指出不要写出让人难以理解也不知道编译器会如何解释的代码来。对于你这种情况,还是换一种安全方式来写,比如多定义几个变量。

在vc++6.0环境下运行c程序和在turboc2.0下的区别?
3.VC++和TC的一些类型大小不一样,对结构体等的字节边界对齐也有所不同.4.两者对C语言标准的支持程度不一样,TC来说实现得并不大标准.但两者都并不支持较新的C99标准.5.VC++编译器的代码优化做得比较好,TC不详.不过两个不同平台的编译器,恐怕也难以做出比较.6.VC++可以开发WIDNOWS程序,但不能做...

在vc++6.0环境下运行c程序和在turboc2.0下的区别?
3.VC++和TC的一些类型大小不一样,对结构体等的字节边界对齐也有所不同.4.两者对C语言标准的支持程度不一样,TC来说实现得并不大标准.但两者都并不支持较新的C99标准.5.VC++编译器的代码优化做得比较好,TC不详.不过两个不同平台的编译器,恐怕也难以做出比较.6.VC++可以开发WIDNOWS程序,但不能做...

VC++ 6.0和Turbo C 3.0有什么区别?VC++是不是Visual C++?TC的程序能在...
turbo c3.0和vc6.0类似 差不多VC++是Visual C++的简称TC的程序在VC上写 一般编译可以通过 但无法运行

vc++6.0与turbo c的区别
如果考试要求用vc++6.0,我觉得还是使用vc++6.0比较好一些,两个的环境毕竟不同。在turbo c 中写的程序直接复制到VC++中能直接用。

vc++6.0编译C和TURBOC编译C的区别在哪里
TurboC 软件本身很小方便安装和下载,只能运行C程序 VC++ 6.0 也可以运行C程序,软件比较大几百MB,VC不光可以运行C也可以运行C++程序,而且可以写可视化程序等等,功能十分强大 vc操作起来比turboc要方便的多,可以很方便的复制,粘贴,而且提示信息也要明显的多,也十分方便调试程序,建议使用VC++,...

tuber C和vc++6.0的区别
这些都是各种高级工具,在不同的阶段不同的场景下选择合适的工具即可。turbo c 初学入门使用(turbo c里面自带很多教程文档)vc++6.0和DEV C++ 做课程设计这种规模的开发时使用。入门也可以使用,没有文档,只有MSDN,属于专业文档,并不通俗易懂,需要有一定基础。VS系列,大型应用软件实际开发时使用。...

简述Turbo C 2.0 与 Visual C++ 6.0 的区别
turbo C 在 C++图形界面和应用Application方面要差的很多 VC很庞大,可以建立任何想要的工程文件 可以创建mfc 等 这是tc所不具备的(好像是,turbo C 用的不是很久没发现这些,具体有没有还得问高手)最早的时候,我就是使用的turbo c,后来改用 VC++ 个人感觉还是VC好用的多 至于所谓的语法问题 都...

相似回答