◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇   也谈谭浩强的C语言   作者:李彤   读了一些关于谭浩强的C教材的文章,感到很有趣。张云楼举了3个例子,前 2个说的程序执行结果,拿到TC(2.0或3.0)上一试就明白了,用不了几分钟。因 为他的书就是建立在TC上的,至于是否在其他实现上如何表现,不在讨论之列。 第3个例子是说法问题,查一查ANSI C标准也就解决了。我得到的结果如下。   1,把b改为long,没有出现警告信息,显示仍然是-32768。再把%d改为%ld, 情况依然。   2,在main中写进"int a; (a=3*5)=4*3;",编译时产生错误信息:   Error D:\2.C 3: Lvalue required in function main   3,我查过ANSI CANSI X3.159-1989),确实如张云楼所引,为可靠起见我又 查了国标GB/T 15272-94(ansi c的中文译本),说:switch语句的控制表达式应 为整型。   有的朋友说例1估计是缺省内存模式所致。不可能,道理很明显,a和1都是 int型,其和也是int型的,就是0x8000,在赋给long型的b时,要符号扩展,于是 b得到的值是0xffff8000=-32768。   有的朋友说可能找到支持例2中表达式的编译器,没错,“凡事皆有可能”, 不过只有可能是不够的,得找出来才行。   有的朋友说:对于例3,张“提到"ANSI C 标准"也没有说版本。除非你查遍 所有版本都同样说法,才能指责谭浩强的教材。" 我想这位大概不知道ANSI C只 有一个版本,就是所谓的C89,也就是ANSI X3.159-1989。在ANSI C之后成立了 WG14国际组织,负责C标准化工作,以后搞出的C95和C99都是ISO标准。   大师也是人,同样也会犯错误。但是大师出错,欺骗性更大,必须苛求不可。 一般读者发现自己与大师不一致,首先会检讨自己,“理解的要执行,不理解也 要执行”。特别像谭这样,动辄百万千万的发行量,当然错误的影响也会创世界 纪录。这些错误由来已久,原以为作者很快会意识到,下次一定会改,遗憾的是 至今无动于衷。   大师的错误还是大师来改正。我等说三道四只能挨骂,适得其反。只有花几 天工夫从头到尾检查一遍,查查标准,上机试试,不难解决。最后大师应该给出 一篇勘误表,不要悄悄地改正,那样对于往日的读者难有脾益。读过一篇大师访 谈,当问到有人认为有错时,大师说那是别有用心。这种话如果出自粉丝之口, 容易理解。不要以为自己是大师就没有错误,或者有错误也不许别人指出。衷心 希望大师负起责任,青年幸甚,国家幸甚! (XYS20090322) ◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇