我翻译的《嗨翻C语言》已经上市一个月了,如果你对我的文字有信心,可以买一本回家,虽然有点小贵。

以下是译者序。

1969年“阿波罗11号”登月成功,贝尔实验室中一个叫 Ken Thompson 的年轻人为了一圆翱游太空的梦想,在当时的 Mutlics 系统上写了一个叫《星际之旅》的游戏。但当时大型机的机时费很贵,每玩一次公司就要为此支付 75 美金,所以 Thompson 打起了小型机 PDP-7 的主意,但当时的 PDP-7只 有一个简陋的运行时系统,不支持多用户,为了能双人对战,Thompson 找来 Dennis Ritchie 一起开发新的操作系统。

他们花了一个月就用汇编语言写出了操作系统的原型,同事 Peter Neumann 看到后把他们的系统戏称为 Unics,Unix 这个名字也典出于此。

1971 年,第一版的 Unix 已经能够支持两名用户在 PDP-11 上玩《星际之旅》了,但因为当时的 Unix 是用汇编语言写的,无法移植到其他机器上,所以他们决定用高级语言重写 Unix,但当时的高级语言无论从运行效率还是功能上都无法满足他们的需要。Thompson 先是在 BCPL 的基础上萃取出了 B 语言,Ritchie 又在 B 的基础上进行了重新设计,这才有了今天大名鼎鼎的 C 语言。

而现在你手上的就是一本关于 C 语言的书。

本书分为三个部分。

  • 第 1 章到第 4 章是基础知识,包括基本语法、指针、字符串、小工具与源文件。
  • 第 5 章到第 8 章为进阶内容,有结构、联合、数据结构、堆、函数指针、动/静态链接。
  • 最后四章是高级主题,内容涵盖了系统调用、进程间通信、网络编程和多线程。

每部分结束以后还用一个实验来提高读者的动手能力。

本书最大的特点是每次在引出新概念前都会先提出一个问题,让读者在知道怎样做(how)之前先知道为什么要这么做的原因(why),并在解决问题的过程中不断提出新的问题,让读者去解决,从而加深理解。书中还设有很多“问答”环节,替读者提出了一些在学习过程中可能遇到的问题。除此之外,作者还使用了大量拟人手法,例如让编译器化身公众人物在访谈节目中现身说法,抑或让静态库和动态库对薄公堂,谈笑风生间,它们的特点跃然纸上。无论你是音乐发烧友、推理迷还是填字游戏爱好者,都可以在这本书中找到吸引你的元素。

两个改变世界的发明起初不过是为了一个游戏,从这个角度看,这本同样趣味十足的《嗨翻C语言》能否算是对于这种精神的一种延续呢?

我在翻译的过程中力求真实传达作者的意图,无论是一个技术上的概念还是一段幽默。为了减轻阅读压力,我还将书中部分代码中的字符串也译为了中文,希望不是画蛇添足。

最后,感谢王琛、邱瑀庭、汤洪波等好友提出的建议;感谢 David Griffith 耐心解答我的问题;感谢图灵的李洁、李松峰、傅志红老师以及各位审读老师提供的帮助与支持。

程亦超

2012年12月17日