C陷阱与缺陷

[美]安德鲁·凯尼格(Andrew Koenig)

出版时间

2020-08-01

ISBN

9787115521279

评分

★★★★★
书籍介绍

《C陷阱与缺陷》作者以自己1985年在贝尔实验室时发表的一篇论文为基础,结合自己的工作经验将这篇论文扩展成对C程序员具有珍贵价值的经典著作。本书的出发点不是批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。

《C陷阱与缺陷》分为8章,分别从词法陷阱、语法陷阱、语义陷阱、链接、库函数、预处理器、可一致性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。

《C陷阱与缺陷》适合有一定经验的C程序员阅读学习,即便你是C编程高手,本书也应该成为你的案头必备图书。

Andrew Koenig,AT&T大规模程序研发部(前贝尔实验室)成员。他从1986年开始从事C语言的研究,1977年加入贝尔实验室。他编写了一些早期的类库,并在1988年组织召开了第一个具有相当规模的C++会议。在ISO/ANSI C++委员会成立的1989年,他就加入了该委员会,并一直担任项目编辑。他已经发表了100多篇C++方面的论文,并在Addsion-Wesley出版了C Traps and Pitfalls 一书(中文版名为《C缺陷与陷阱》,由人民邮电出版社出版),还应邀到世界各地演讲。

Anderw Koenig不仅有着多年的C++开发、研究和教学经验,而且还亲身参与了C++的演化和变革,对C++的变化和发展产生了重要的影响。

AI导读
核心看点
  • 剖析C语言词法、语法及语义陷阱
  • 详解链接、库函数与预处理器隐患
  • 提供避免常见错误的实用编程建议
适合谁读
  • 有一定经验的C语言程序员
  • 希望深入理解C语言机制的开发者
  • 需排查复杂Bug的资深工程师
读前提醒
  • 非入门书,需具备C语言基础
  • 建议结合代码实践对照阅读
  • 注意书中部分语法已过时
读者共识
  • C语言排坑指南,经典必读
  • 内容干货满满,避免常见错误
  • 适合案头常备,随时查阅参考

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "许多系统中的标准输入/输出库都允许程序打开一个文件,同时进行写入和读出的操作:"
  • "上面的例子代码打开了文件名由变量file指定的文件,对于存取权限的设定表明程序希望对这个文件进行输入和输出操作。 编程者也许认为,程序一旦执行上述操作完毕,就可以自由地交错进行读出和写入的操作。遗憾的是,事实总难遂人所愿,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输入操作不能随后直接紧跟一个输出操作,反之亦然。如果要同时进行输入和输出操作,必须在其中插入fseek函数的调用。"
  • "char *p, *q; p = "xyz"; 实际上,p的值是一个指向'x', 'y', 'z'和'\0' 4个字符组成的数组的起始元素的指针。"
  • ""另一种考虑不对称边界的方式是,把上界视作某序列中第一个被占用的元素,而把下界视作序列中第一个被释放的元素.""
  • "编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不可能组成一个有意义的符号。 “如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串、”"
  • "前面一段讨论了解决这个问题的两种方法, 实际上提示了我们避免“栏杆错误”的两个通用原则: (1) 首先考虑最简单情况下的特例,然后将得到的结果外推,这是原则一。 (2) 仔细计算边界,绝不掉以轻心,这是原则二。"
  • "C 语言中的一个重要思想就是分别编译(Separate Compilation),即若干个源程序可以在不同的时候单独进行编译,然后在恰当的时候整合在一起。 典型的连接器把由编译器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体,该实体能够被操作系统直接执行。其中,某些目标模块是直接作为输入提供给连接器的;而另外一些目标模块则是根据连接过程的需要,从包括有类似 printf 函数的库文件中取得的。 连接器通常把目标模块看成是由一组外部对象(external object)组成的。每个外部对象代表者机器内存中的某个部分,并通过一个外部名称来识别。"
  • "两个具有相同名称的外部对象实际上代表的是同一个对象。 static 修饰符是一个能够减少此类命名冲突的有用工具。 ... a 的作用域限制在一个源文件内,对于其他源文件,a 是不可见的。因此,如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以 static 修饰符声明。"
作者简介
Andrew Koenig,AT&T大规模程序研发部(前贝尔实验室)成员。他从1986年开始从事C语言的研究,1977年加入贝尔实验室。他编写了一些早期的类库,并在1988年组织召开了第一个具有相当规模的C++会议。在ISO/ANSI C++委员会成立的1989年,他就加入了该委员会,并一直担任项目编辑。他已经发表了100多篇C++方面的论文,并在Addsion-Wesley出版了C Traps and Pitfalls 一书(中文版名为《C缺陷与陷阱》,由人民邮电出版社出版),还应邀到世界各地演讲。 Anderw Koenig不仅有着多年的C++开发、研究和教学经验,而且还亲身参与了C++的演化和变革,对C++的变化和发展产生了重要的影响。
目录
第0章 导读 1
第 1章 词法“陷阱” 5
1.1 =不同于== 6
1.2 & 和 | 不同于&& 和 || 8
1.3 词法分析中的“贪心法” 8

显示全部
用户评论
C和C++的经典著作。
墙裂推荐!任何一位学习C语言的朋友错过这本书都会后悔一辈子。
能从一篇论文延伸为这一整本书,作者真的很厉害。
很经典的一本书,这本c陷阱与缺陷,讲述了很多c语言过程中容易出现的问题,对学习c语言有很大的帮助,也能避免很多坑。
计算机巨佬写的C语言排坑指南。
这是我近两年读过不错的书,也许人总是一定出错才能印象深刻。作者在书中对c语言易错点的阐释,当你确实也遇到过的时候,你就会发现这本书的奥妙所在。
这是我最喜欢的一本书。
收藏