C语言中的数组与指针
Mar 13

昨天看了张云楼的《谭浩强大师的世界纪录》,也只是一笑了之。大陆的计算机教材,也就是那么回事。翻译的生硬、错误多,自己写的干巴巴、过时、错误多。就拿谭浩强的C语言教材来说,我只在近20年前读过,只记得味如嚼腊。现在唯一还有印象的,是谭师傅花了很大一段文字说明他为什么认为struct应该译作“结构体”,而不是“结构”。对中国人来说,想学好计算机,能阅读英文资料是一项必不可少的能力。

没想到今天还有一位“注意版本”同学不服气,一定要为谭师傅辩护,却不免底气不足。不过倒引起我的兴趣,把双方的文章又看了看,觉得有些问题不得不说。张指出了谭书三处问题(实际上是4个),总结如下:

1、谭书:TC中int 32767+1 = -32768,long 32767+1 = 32768。张质问:“敢问谭教授上机试过没有,我试过了,不行。”
2、谭书:变量可以作左值,…常变量不能作左值。张质问:“有常量、有变量,什么叫常变量。”
3、谭书:赋值表达式能够作为左值,例如(a=3*5)=4*3可得a为12。张质问:”真够经典的了,不知谭教授怎样创造出来的?“
4、谭书:ANSI 标准允许switch后面的“表达式”为任何类型。张质问:“不知谭教授真的看过ANSI标准?”

而“注意版本”同学则认为“张云楼老师说发现了大量低级错误,恰恰说明其见识太少”。并在扯了一阵什么project和makefile以显示其“见识”并不“太少”之后,作了如下回复(对于2没有回复):

1、“相信教材作者至少在某个版本上试验过,很可能后来版本更新了引起问题。”
3、“在有些版本的编译器确实是支持的。”
4、“除非你查遍所有版本都同样说法,才能指责谭浩强的教材。“

张云楼号称自己是“教了10几年的C语言“的“计算机教师“,暂且认为是中国计算机教师的一个样本吧。而见多识广的“注意版本”可算是(至少是曾经的)学生。一师一生,都是半吊子。不用说追英赶美了,和印度比比都觉得不好意思。对于张云楼提出的问题,我的看法如下。

1、谭书说明了是TC。我不知道张老师用什么“试过了”,遗憾的是,我刚刚试验的结果,TC2.01和TC++3.0结果都一样,就是谭师傅讲的是对的(这里要说明的是TC最高版本就是2.01,以后改为Borland C)。“注意版本”同学却连试一下都没有,就乱说什么“版本更新”的问题,估计是微软的东西用得太多了。

2、我来指导一下张老师。所谓“常变量”,就是constant variable,例如 “const int i = 20;”。这时 i 仍然是变量(variable),但其值不能被程序改变。这样的变量在第一次赋值后,就不能再作为左值出现。

3、不知道“注意版本”同学是在什么“版本”的编译器上试过?什么版本的C语言表态式可以作左值?不会是谭氏版吧?

4、我可以很明确地告诉不愿读书、不愿试验但见多识广的“注意版本”同学,不管你注意的是哪个版本的ANSI标准,switch都只能接受整数类型为参数。对于这一点,完全不需要看ANSI标准(很贵又很长),只需要看看C语言经典K&R(The C Programming Language)第二版就知道了。据我所知,这本书在国内已有不少影印本,网上也有的下载,查一查还是不难的。

没有想到的是,这么多年来,大陆的学生仍然用的是这种教材。以后有机会一定要把谭师傅的书好好研读一下。

“也说谭浩强的C教材”有10篇评论

  1. Hull Says:

    傲气十足,尤其是:
    “没有想到的是,这么多年来,大陆的学生仍然用的是这种教材。以后有机会一定要把谭师傅的书好好研读一下。”
    和你讨论都要防被嘲笑,免了,让他自我陶醉去吧。

  2. Says:

    看来eng应该和俺差不多的年龄。不过我记得是在92年第一次见到这个书,应该是91年出的。之所以记得这么清楚是因为那时候(91年)要给学弟学妹开课,但是没有合适的教材。开始先弄了本好像是统计出的。感觉一般,后来有人说有这么一本。92年拿到手,最大的感觉就是罗嗦。

    如果说那时候条件所限大多数人看不到原版书,现在为什么还不读呢,国内的影印版也不贵啊。K&R的The C Programming Language真的已经过时了吗?
    下面借宝地一说:
    另外xys上有人说”计算机是年轻人的天下,不应苛求那么大年纪的谭老师。不过,没有年轻人写的计算机教材,应该让人遗憾。”
    简直是扯淡。他的问题在于其错误是由于其水平低本身导致的,而不是由于其年纪大导致的不能update其教材。
    另外什么叫经典?K&R的书就是答案。看他那意思,没有年轻人写的计算机教材就遗憾。那人类只好永远遗憾下去了。今天的年轻人20年后就不再是年轻人。那时怎么办?全部再重写?否则就遗憾?

    还有那些教师,专门教C的教师,写C教材的书还真是雷,难道你们就从来不看C标准吗?

    还有个为其风格辩护的。不错工业界,或者说不同的企业,甚至同一公司不同的部门是有不同的风格,但是同一个项目里面会容忍这样多变的风格?

  3. 基本 Says:

    ANSI C较长,不过很容易在网上找到,比如wikipedia C (Programming Language)条目下有
    C89
    http://flash-gordon.me.uk/ansi.c.txt
    和C99
    http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
    有兴趣的可以读一读。


    这些都是draft,不是正式标准。

  4. 穆扬 Says:

    “常变量”,这个译法很成问题。

  5. 穆扬 Says:

    什么叫“死活人”?!
    呵呵

  6. 穆扬 Says:

    (a=3*5)=4*3
    这的确很惊人!

  7. 穆扬 Says:

    张质问:“不知谭教授真的看过ANSI标准?”
    我可以负责任地告诉你
    没看过

  8. 穆扬 Says:

    1、“相信教材作者至少在某个版本上试验过,很可能后来版本更新了引起问题。”
    3、“在有些版本的编译器确实是支持的。”
    4、“除非你查遍所有版本都同样说法,才能指责谭浩强的教材。“

    一团糨糊
    这种人怎么能学理科

  9. 穆扬 Says:

    “就是谭师傅讲的是对的”
    我觉得应该是
    “谭师傅试过,现象描述无误,但对现象的解释是成问题的”

  10. 穆扬 Says:

    “但其值不能被程序改变。”
    我觉得是不能被显式的改变(=,++,–),通过指针应该可以

发表评论

CAPTCHA Image
*