购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2版前言

在计算领域中,把显而易见的转变为有实用价值的,这一过程是“挫折”一词的生动体现。

自本书第1版出版以来,基于C的语言大量兴起(其中最杰出的是Java和C#),C++和Perl等相关语言也取得了更大的成就。尽管如此,C语言仍然像当年一样流行,悄无声息地掌控着世界上的许多软件。跟1996年一样,C语言仍然是计算机领域里的通用语言。

然而,即便是C语言也必须随着时间而发展。C99标准的发布催生了对本书第2版的需求,而且,第1版涉及的DOS和16位处理器也趋于过时。同样,C11和C18的发布促使修订版对内容进行了全面更新,并在其他许多方面做了改进。

修订版新增内容

下面列出了这一版的新特色和所做的改进。

此外,我在这一版中对全书的文字和解释说明做了改进。这些改变所需的工作量很大,过程很辛苦:每句话都检查过并(在必要的时候)重新写过。

尽管这一版改动很大,我仍然尽可能多地保持了原有的章节编号。尽管第27章和第28章的内容是全新的,但其他许多章都有新增的内容,少数原有章节的顺序也有所变动。这一版删去了一个附录(C语言语法),但新增了C1 X 、C99和C89的附录。

目标

这一版的目标与第1版一致。

现代方法到底指的是什么

本书最重要的目标之一就是通过一种“现代方法”来介绍C语言。我试图通过以下这些途径来实现这一目标。

“问与答”部分

每章的末尾都有一个“问与答”部分,汇集了与本章内容相关的问题及其答案。“问与答”部分包括以下内容。

“问与答”部分中的某些问题与对应章中的具体内容直接相关,我用一个专门的图标 来标记这些具体内容,以提示读者有附加信息可用。

其他特色

除了“问与答”部分,我还加入了许多有用的特色,其中很多都用简单而独特的图标做了标记。

程序

选择程序示例并不是件轻松的工作。如果程序过于简洁和做作,那么读者将无法体会如何将这些特性应用于现实世界。如果程序过于真实,那么它的要点将很容易被埋没在过多的细节中。我采取了折中方案。在首次介绍时,先通过小而简单的示例使概念清晰,然后再逐步建立完整的程序。我没有使用过长的程序,因为根据我个人的经验,教师没有时间介绍这些内容,学生也不会有耐心去阅读。但是,我并没有忽视编写大规模程序时会出现的问题,相关内容在第15章和第19章中进行了详细的介绍。

这一版的程序有些小变化。在大多数情况下, main 函数的格式为 int main (void){...} 。这一改变既反映了业界的惯例,又能够与C99兼容:C99要求每个函数都有一个显式的返回类型。

源代码

本书中所有程序的源代码都可以从 https://exl.ptpress.cn:8442/ex/l/609033ea 下载 。有关本书的更新、校正和最新消息也可以在此获得。

读者

本书是为大学本科阶段的C语言课程编写的教材。具有其他高级语言或汇编语言的编程经验会对阅读本书很有帮助,不过这些经验对于会用计算机的读者(我以前的一位编辑称他们为“熟练的初学者”)来说并不是必需的。

因为本书内容齐备、自成一体,并且既可用于学习又可作为参考,所以它非常适合作为其他一些课程的辅助读物,如数据结构、编译器设计、操作系统、计算机图形学、嵌入式系统及其他要用C语言进行项目设计的课程。“问与答”部分以及对实际问题的强调,使得本书对于培训班学员和自学C语言的人来说也很有吸引力。

组织结构

本书分为4个部分。

全面讲授C语言的课程应该按顺序覆盖前20章的内容,并根据需要增加第21~28章中的一些内容(其中讨论了文件输入/输出的第22章最为重要)。短期课程可以忽略以下内容而不失连贯性:8.3节(C99中的变长数组)、9.6节(递归)、12.4节(指针和多维数组)、14.5节(其他指令)、17.7节(指向函数的指针)、17.8节(受限指针)、17.9节(弹性数组成员)、18.6节(内联函数)、第19章(程序设计)、20.2节(结构中的位域)和20.3节(其他底层技术)。

练习题和编程题

作为一本教材,拥有多样化的精选习题显然是非常必要的。这一版既有练习题(不需要写出完整程序的简短习题)又有编程题(需要编写或修改完整程序的习题)。

有些练习题的答案不是显而易见的(有人称其为“刁钻问题”)。因为C语言程序经常包含这类代码的大量案例,所以我认为有必要提供一些这样的练习,并用星号(*)做了标注。一定要谨慎地对待有星号的习题:要么格外小心,认真考虑;要么干脆绕开它。

反馈

为了保证本书内容准确,我付出了极大的努力。然而,任何这种篇幅的书都不可避免地会有一些错误。如果读者发现了错误,请通过 cbook@knking.com 这个电子邮箱与我联系。我也同样期望听到读者的其他反馈,比如,你觉得哪些内容特别有用,哪些内容没什么用,希望添加哪些内容等。

致谢

首先,我要感谢本书的编辑——Norton出版社的Fred McFarland和Aaron Javsicas。本书的编辑工作最初由Fred负责,随后Aaron加入并付出了极大努力使本书得以完成。同时,还要感谢副主编Kim Yi、文字编辑Mary Kelly、生产经理Roy Tedoff和编辑助理Carly Fraser。

以下同事对这一版的部分或全部书稿进行了审阅,在此致以诚挚的谢意:Markus Bussmann(多伦多大学)、Jim Clarke(多伦多大学)、Karen Reid(多伦多大学)和Peter Seebach(comp.lang.c.moderated新闻组的主持人)。其中需要特别提到的是Jim和Peter,他们的详细审阅使这一版避免了许多错误。再次感谢第1版书稿的审稿人(按姓氏字母排序):Susan Anderson-Freed、Manuel E. Bermudez、Lisa J. Brown、Steven C. Cater、Patrick Harrison、Brian Harvey、Henry H. Leitner、Darrell Long、Arthur B. Maccabe、Carolyn Rosner和Patrick Terry。

我收到了第1版读者反馈的许多有用的意见,感谢每一位花时间提意见的读者。佐治亚州立大学的学生和同事也向我反馈了不少有价值的意见。Ed Bullwinkel和他的妻子Nancy阅读了手稿的很多内容,在此我也要感谢他们。我还要特别感谢我的系主任Yi Pan,他非常支持我的这项工作。

感谢我的妻子Susan Cole一如既往地支持着我。还有我们的猫咪Dennis、Pounce和Tex,在完成本书的过程中,它们一直陪伴着我。有时,Pounce和Tex的争吵使我在深夜写作时仍能保持清醒。

最后,我还要感谢已故的Alan J. Perlis 。他的警句出现在本书每一章的开始。20世纪70年代中期我在耶鲁大学求学期间,曾有幸在Alan的指导下进行过短暂的学习。我想如果他知道自己的警句出现在一本C语言书中,一定会非常高兴。 wK+S2/jWLV+64+wq6f+qtmkJS/QMkjv3o0AS7U9bDi0bfh7KlEEC7k1frqQFzM6a

点击中间区域
呼出菜单
上一章
目录
下一章
×