找回密码
 立即注册
搜索
楼主: ricoman

( ++i )+( ++i )+( ++i )问题,大侠近来看看!

[复制链接]

340

主题

3478

回帖

5028

积分

网站编辑

积分
5028
发表于 2004-8-11 08:26:19 | 显示全部楼层
双目加按照左右结合律,应该前两个相加,在与第三个相加,问题是第三次i+1,发生在第二次加法运算时,但是已经不能够影响前两次i+1的值。这点肯定与变量活动周期内一致性不吻合。TC应该说是完全兼顾++优先,+左右结合的规定来的。是中规中矩的做法。从C的定义来讲,必须先计算三次i+1,然后再执行加法才是对的。VC等这样做基本上是错的。如果是三个不同变量,VC能得出正确结果,但是遇到这种极端情况不能正确处理,就是编译器有瑕疵。是应该除掉的BUG。
回复

使用道具 举报

498

主题

5866

回帖

8541

积分

网站编辑

LMSung

积分
8541
 楼主| 发表于 2004-8-11 09:09:41 | 显示全部楼层
谢谢!
很专业阿!哈哈
回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2004-8-11 09:48:25 | 显示全部楼层
我倒是觉得tc的结果是错的三个变量相加,是从左至右,所以应该是16
我在gcc 2.95 freebsd,forte c/c++ solaris,visual age for c/c++ aix下的结果都是16。手上没有其他的编译器做测试,不知道其他编译器的结果是什么
tc实在是太老了,还是把它扔了吧
回复

使用道具 举报

327

主题

3264

回帖

3641

积分

荣誉版主

积分
3641
发表于 2004-8-11 12:57:43 | 显示全部楼层
专业! 赞!   :)
回复

使用道具 举报

340

主题

3478

回帖

5028

积分

网站编辑

积分
5028
发表于 2004-8-11 14:37:48 | 显示全部楼层
哪位能不能找到其他纯粹的C语言编译器运行一下,怀疑C和C++编译器本身要求不一样。采用TC++或watcom c试一下。

估计,纯粹C结果18, C++结果16。很可能两者对计算顺序定义有所不同。好像C++推出时针对C的二义性,做过一些强制规定。我想,使用任何C++编译器结果都会是16。早期的dos C编译器可能也有18的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-20 09:33 , Processed in 0.083265 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表