
18次印刷的奇迹
——经典C语言图书C Traps and Pitfalls简介
如果有人问我,要想学好一门编程语言,应该阅读什么样的图书?毫无疑问,在大多数场合下,我都会向他推荐市面上最新出版的图书。原因就是:以现在计算机领域内技术的发展速度,几乎每隔一段时间,我们就需要对自己现有的知识进行更新。这样看来,使用一本比较新的图书,里面的内容会比较贴近当前技术的发展,因而也就能够让你更容易掌握所要学的东西。
但有一本讲述C语言的书,自出版以来,历经14载,一直都被各个书评站点(或书评人)列入“重点推荐”的清单中。尤为夸张的是,14年来,在它的18次印刷版本中,除去第二次印刷稍微修改过一些问题,以后的16次印刷,我们居然发现它的内容没有丝毫变更!对于技术图书,我想其精确性与权威性也算是奇迹了吧。
这就是Andrew Koenig给我们带来的C Traps and Pitfalls(《C陷阱与缺陷》)。在C/C++领域中,Andy(Andrew的昵称)的名字对于每个人来说绝对是如雷贯耳。作为一位知名的专栏作者,Andy(和他那位同样大名鼎鼎的妻子Barbara Moo)已经在各类杂志上面发表了上百篇的杂志文章,给很多人在技术进步的道路上带来了极大的帮助。ACCU的Francis Glassborow对他的评价是“Andy是世界上最出色的几位C++专家之一”。
本书是Andy的第一本技术图书,其原始素材来自于他在1986年提交的同名技术报告。在书中,作者针对C程序在编译、链接的过程中可能碰到的种种问题以及编译、运行环境对程序可能带来的影响等,列出了许多值得我们注意的地方。按照作者本人的观点,以前人碰到过的问题来现身说法,可以帮助你避免那些一而再、再而三出现在你的程序中的问题。由于是以实例来描述作者(以及他人)所碰到过的具体问题,因此本书少去了许多空洞无味的说教,虽然本书篇幅不大(原书正文只有区区147页),但实际上,它的每个小节、每一段都蕴含着作者(以及他人)大量的经验教训,都值得我们去仔细琢磨,经常温习。为此,Francis Glassborow说到:“从我了解C语言开始,我就将它时时放在手边,经常翻阅。”作者自己也在书中毫不谦虚地说:“如果你是一个程序员,在开发中经常用到C语言,这本书应该成为你的案头必备图书。即使你已经是专家级的C语言程序员,仍然有必要拥有一本。”事实上,Andy并没有吹嘘,就书中所列出的种种问题,我本人也不止一次在自己的程序(也包括别人的程序)中发现它们的踪迹,而且有些问题出现得还极为频繁。这使我不禁想到,要是我们能够早一些看到这本书上提及的问题,那岂不是可以省去很多开发时的除错时间……
可能有人会有疑问:从书名来看,它是一本讲述C语言的图书,那么对于C++的学习者来说,它难道也同样有价值吗?另外,现在C语言的ISO/ANSI标准文档C99都已经制订出来了,而作为一本在C89之前出版的C语言图书,它的作用是否还和以前一样大呢?答案是肯定的。本书英文版连续18次印刷的事实就是有力的证明。实际上,C++和C的区别并不大,在C程序中常犯的错误通常在C++程序中也经常得以重现,因此,从这个角度来说,C语言中的陷阱也常常就是C++语言中的陷阱。此外,虽然C99相对于以前的K&R C有了一些变化,但在较低层次(如词法、语法)上,它们几乎是没有差别的。因此,对于本书中所有问题的讨论,几乎都可以适用于ISO/ANSI C。
现在,人民邮电出版社翻译出版C Traps and Pitfalls一书,无疑是献给C和C++程序员的一份厚礼。我本人很荣幸能够担任本书的技术审校,为本书中文版的出版尽一点绵薄的心力。感谢译者的辛勤劳动,也感谢出版社能够给我这样的机会!希望本书能够为你的学习带来一些帮助。
王 昕
2002年8月