序
最近,我在逛一家书店时,看到里面有大量枯燥乏味的C和C++图书,心情格外沮丧。我发现,极少有作者想向读者传达这样一个信念:任何人都可以享受编程。在冗长而乏味的阅读过程中,所有的奇妙和乐趣都烟消云散了。如果你硬着头皮把它啃完,或许会有长进。但编程本来不该是这个样子的!
编程应该是一项精妙绝伦、充满生机、富有挑战的活动,而讲述编程的图书也应能令读者时时迸射出激情的火花。本书是一本教学性质的图书,但更希望重新把快乐融入编程之中。如果本书不合你的口味,请把它放回书架,但务必放到更显眼的位置上,这里先行谢过。
好,听过这个开场白后,你不免有疑问:关于C语言编程的书可以说是不胜枚举,那么这本书又有什么独到之处呢?
本书应该是每位程序员的第二本学习C语言的图书。这里所提到的绝大多数教程、提示和技巧在其他书上是找不到的,即使有的话,也是作为心得体会写在图书的空白处或旧打印纸的背面。作者和Sun公司编译器、操作系统小组的同事在多年的C语言编程实践中,积累了大量的知识和经验。本书讲述了许多有趣的C语言故事和轶闻,诸如连接到因特网上的自动售货机、太空软件中存在的问题,以及一个C语言的缺陷怎样使整个AT&T长途电话网络瘫痪等。本书的最后一章是C++语言的轻松教程,可帮助你熟悉这门从C语言演化而来的日益流行的语言。
本书讲述的是应用于PC和UNIX系统上的ANSI标准C语言,对C语言中与UNIX平台复杂的硬件结构(如虚拟内存等)相关的特性做了详细描述,也对PC的内存模型和Intel 8086系列对C语言产生的影响做了全面介绍。具备扎实C语言基础的人很快就会发现书中充满了很多可能需要多年实践才能领会的技巧、提示和捷径。它覆盖了许多令C程序员困惑的主题:
typedef struct bar{ int bar; }bar的真正意思是什么?
我怎样把一些大小不同的多维数组传递到同一个函数中?
为什么extern char *p;同另一个文件的char p[100];不能够匹配?
什么是总线错误(bus error)?什么是段违规(segmentation violation)?
char *foo[]和char(*foo)[]有何不同?
如果你对这些问题不是很有把握,很想知道C语言专家是如何处理它们的,那么请继续阅读本书!即使你对这些问题的答案已经了如指掌,对C语言的其他细节也是耳熟能详,也请阅读本书,继续充实你的知识。如果觉得不好意思,就告诉书店职员“是给朋友买书”。
Peter Van Der Linden
加州硅谷