
    序自从1978年《C程序设计语言》出版以来，计算机界经历了一场革命。大型计算机变得更大；而个人计算机的能力可以和十年前的主流计算机相媲美。在这段时间中，C语言也在悄悄地改变，并且早已超出了仅仅作为UNIX操作系统的语言的范畴。 C的适用范围的扩大、在这些年中语言的改变和各个组织开发的超出其预定内容的编译器，所有这一切要求对C语言有一个比本书第1版更精确和更新的定义。在1983年，美国国家标准协会（ANSI）成立了一个委员会，它的目标是产生“一个无二义性的、独立于机器的C语言的定义”，同时仍保持其精髓。其结果就是C的ANSI标准。此标准规范了一些在本书第1版中提示过但没有描述的结构，特别是结构赋值和枚举。它提供了一种新的函数声明的形式，允许在使用中对函数的定义进行交叉检查。它说明了一个标准库和一个完成输入输出、内存管理和字符串操作等类似任务的函数集扩充。此标准明确地说明了原始定义没有指出的一些特性的行为。同时，此标准还明确地说明了语言中的哪些部分依然依赖于机器。《C程序设计语言》的第2版描述的是ANSI标准定义的C语言。尽管我们已经指出语言中的多种革新，但我们还是决定不用新的形式来写。对于大部分内容并没有多大的差别，最明显的改变是新形式的函数声明和定义。现代编译器已能支持此标准的大部分特性。我们尽力保持本书第1版的简洁性。C不是一个大型语言，也不需要一本很厚的书来描述。我们改进了对典型特性的阐述，如指针，它是C程序设计的中心。我们对以前的例子进行了提炼，并在几章中增加了新的例子。例如，我们用程序来处理复杂的声明，这些程序将声明转换为单词或反之。像以前一样，所有例子的文本都以机器可读的形式直接经过测试。附录A是参考手册，不是标准，但我们的目的是希望用较少的篇幅表述标准的要点。它是要对于程序员来说容易理解，而不是提供给编译器实现者的定义—这正是标准承担的角色。附录B是对标准库提供的功能的总结。附录C是对以前版本的变动的小结。就像我们在第1版序中所说的，“当对C的经验增加时它显得很好用”。经过十几年的实践，我们仍然这么认为。我们希望这本书能帮助你学习并使用好C语言。非常感谢那些帮助我们完成本书这一版的朋友们。Jon Bentley、Doug Gwyn、Doug McIlroy、Peter Nelson和Rob Pike几乎对本书手稿的每一页都提出了建议。我们非常感谢Al Aho、Dennis Allison、Joe Campbell、G.R.Emlin、Karen Fortgang、Allen Holub、Andrew Hume、Dave Kristol、John Linderman、Dave Prosser、Gene Spafford和Chris Van Wyk，他们仔细地阅读了本书。我们也收到了来自Bill Cheswick、Mark Kernighan、Andy Koenig、Robin Lake、Tom London、Jim Reeds、Clovis Tondo和Peter Weinberger的有益的建议。Dave Prosser回答了很多关于ANSI标准的细节问题。我们广泛地使用了Bjarne Stroustrup的C++的翻译程序来部分测试我们的程序。Dave Kristol为我们提供了一个ANSI C编译器进行最终测试。Rich Drechsler帮助我们进行了排版。诚挚地感谢每一个人。 Brian W. Kernighan Dennis M. Ritchie 

