◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇   也谈谭浩强   作者:wanderor   极少在新语丝看到本专业的文章,因此张云楼《谭浩强大师的世界纪录》一 文一出,立刻吸引了我的注意。但此文价值不高,挑几个小错,上纲上线,当时 也不觉得有回复的必要。不料其后又有“注意版本”发表驳文,更是等而下之。 就好比有人放了个屁,路人甲揪住他不依不饶的固然很没有意思,但路人乙却挺 身而出,宣布这个屁是香的,实在很挑战底线。   张云楼所举的第一、三点,以及第二点后半段,抛开其诛心之论不谈,在事 实上都是成立的。第一点应为“将变量 a、b改成long型”,第三点应为“任何 整数类型”,都是很简单的错误。第二点后半段稍微复杂一些,“赋值表达式能 够作为左值”是C++语言标准里面的规定,而在C语言标准中是明文禁止的,谭教 授大概是搞混了。掌握的编程语言一多,这种细枝末节处往往混淆,全靠编译器 帮忙才能发现错误。不清楚TC这种老古董行为如何,Yush可以帮忙试一下。   至于第二点前半段,我觉得谭教授讲得还算清楚,张云楼作为教了十几年C 语言的计算机教师而一直没有看懂,我也很无奈。谭教授在书中对“常量”下过 定义(可用Google   Book Search检索),诸如“3”、“0x7F”之类就是。至于“常变量”,顾 名思义就是“值不变的变量”,诸如“const int x”等。他对此没有专门下定 义,也无此必要。谭教授一方面将两者区分开来,另一方面又略过它们之间的区 别没有详谈,这种微言大义在普及型著作中是常见的。如果真要加上一句“常量 和全局常变量在编译期定值,而局部常变量在运行期定值”,不知道有多少学子 要睁大迷茫的双眼。   张云楼提的几个问题虽然肤浅,真要钻下去也挺有意思。但“注意版本”显 然是没做功课,直接裸奔。比如第一点,扯什么“TC和MSC有差别”,书中明白 说过这里用的是TC,莫非你还当谭教授在撒谎不成?又谈到“标准化”,这个行 为完全符合ANSI标准(鸣谢朋友NetMD的探讨与帮助),就是16位溢出的问题, 也跟“编译处理的参数”、“编译模式”、“版本更新”这些唬人的概念统统无 关。至于“make文件和project的概念”云云纯属无关话题,拉扯这些是网上常 见的转进策略。   第二点涉及到C语言规范问题,“注意版本”再次文不对题,妄谈什么代码 风格、“编程新潮流”。   在最后一点上,就为了这样一个明显的错误,“注意版本”要求张云楼“查 遍[ANSI C标准的]所有版本”,这纯属强词夺理,您老人家自己怎么不查?(从 “注意版本”的行文来看,他/她还真不一定理解ANSI C 标准的“版本”是什么 意思。)一句“很可能”就了事,您到底理解不理解像C语言这样的底层语言为 什么要对switch语句做出这样的限制,莫非您以为这是一个兼容性问题?还一本 正经地建议别人去看“switch语句编译后的汇编语言”,不知如果switch语句写 错了,通不过编译,又该去哪里看这个“编译后的汇编语言”?我看和那个“没 来的举手”的段子有一拼。   又,谨点评时进一文于下:   时进所言的“难看得要死”的“奇怪的大括号和缩进方式”,还真是一门相 当重要的“独特风格”:GNU style。下次如果有学生这样写代码,不妨稍加留 意,也许他不是从谭浩强那里学来的,是自己研读GNU代码时学到的,也许他还 真是一个编程高手呢。另外,也不要瞧不起我们敲空格缩进的。很多公司都禁用 TAB的。当然了,也可以配置一下编辑器,让它在按TAB键的时候也输出空格。不 过很多公司都要求缩进两个空格,而且程序员专用的编辑器一般都有强大的智能 缩进功能,TAB键所能带来的好处也就微乎其微了。不妨考虑把TAB键配置来干别 的,例如自动补全。你看,工业界远比象牙塔复杂得多:-) (XYS20090314) ◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇