自从1978年《C编程语言》出版后,计算机世界经历了革命般的变化。大型机变得更大,PC机能与十年前大型机匹敌。这段时期,C语言也发生了变化,虽然只是适度的,但它比最初作为UNIX操作系统语言扩展了很多。
在1983年,ANSI成立了旨在创造“一种明确的、独立于机器的C语言定义”的委员会,该会现在仍然保持着它的初衷。结果产生了C标准。
第一版中隐含了标准化的构建却没有明确地表述出来,特别是结构分派和列举。它提供了一种新形式的函数声明并且使用时再确认。它具体指定了一个标准库,包括了一个广泛的函数集去执行输入输出、内存管理、字符操作等类似的任务。它使原先版本中不明确的行为特性变得准确,并且明确指出C语言的那些方面仍然是机器相关的。
第二版《C编程语言》根据ANSI标准去描述C语言。 对于大部分,这并没有什么不同,最明显的变化是函数的声明和定义。现在的编译器已经支持大部分的这种标准的特性。
我们努力去维持第一版的简短。C语言不是规模宏大的语言,不值得写一本厚书。我们改进了重要属性的说明,比如说C语言编程的核心:指针。我们提炼了以前的例子,在一些章节还增加了一些新的例子。
附录A——参考手册,不是标准,但是我们试图在校篇幅内传达标准的本质部分。它是面向程序员的简单理解,而不是属于标准的编译器制作者。附录B是标准库内容的摘要,它也面向程序员参考,不是实现者。附录C是同原先版本不统的一个简练的摘要。
正如我们在第一版前言中所说的C语言会随着你经验的增加而更加适合你。,十年后,我们仍然坚持这个信条。我们希望这本书能帮助你们学习C语言。
我们深深的感谢那些帮助我们出版第二版的朋友。Jon Bently, 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, and Chris van Wyk的仔细阅读。我们也得到了Bill Cheswick, Mark Kernighan, Andy Koenig, Robin Lake, Tom London, Jim Reeds, Clovis Tondo, and Peter Weinberger的有助的建议。Dave Prosser回答了关于ANSI标准的许多细节问题。我们广泛的使用Bjarne Stroustrup's C++ translator做我们程序的本地测试。Dave Kristol给我们提供了ANSI C 编译器做最后测试。Rich Drechsler帮助了排版。
我们真诚的感谢所有人。
Brian W. Kernighan
Dennis M. Ritchie