译者序

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

1 Multics全称为MULTiplexed Information and Computing System(多路信息计算系统)是1964年由贝尔实验室、MIT和通用电气共同研发的一套安装在大型机上的多人多任务操作系统。因为工作进度缓慢,贝尔实验室于1969年退出该计划。

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

2 意思是UNiplexed Information and Computing System(单路信息计算系统),用来影射Multics。

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

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

本书分为三个部分。

  • 第1章到第4章是基础知识,包括基本语法、指针、字符串、小工具与源文件。

  • 第5章到第8章为进阶内容,有结构、联合、数据结构、堆、函数指针、动/静态链接。

  • 最后四章是高级主题,内容涵盖了系统调用、进程间通信、网络编程和多线程。

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

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

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

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

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

程亦超

2012年12月17日

目录