C陷阱与缺陷

[美] Andrew Koenig

出版时间

2008-01-31

ISBN

9787115171795

评分

★★★★★

标签

编程

书籍介绍

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

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

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

AI导读
核心看点
  • 剖析C语言词法、语法及语义中的常见陷阱
  • 深入讲解指针、数组、宏定义等易错细节
  • 提供提升代码可移植性与健壮性的实用建议
适合谁读
  • 有一定C语言基础的程序员
  • 希望深入理解C语言底层机制的开发者
  • 需要排查复杂Bug或优化代码质量的技术人员
读前提醒
  • 本书出版较早,部分规范已随ANSI C更新
  • 中文版排版质量较差,代码阅读体验不佳
  • 建议结合现代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公司Shannon实验室大规模编程研究部门成员,同时是C++标准委员会的项目编辑。他的编程经验超过30年,其中有15年在使用C++,他已经出版了超过150篇和C++有关的论文,并且在世界范围内就这个主题进行过多次演讲。
目录
第0章 导读
第1章 词法“陷阱”
1.1 =不同于==
1.2 & 和 | 不同于&& 和 ||
1.3 词法分析中的“贪心法”

显示全部
用户评论
看至P19,头一次看到将诸如(*(void(*)())0)之类的声明解释的如此通透.果然盛名之下其实难副,这薄薄的小册子值得收藏.但是排版印刷较差,是人民邮电毁的比较厉害的一系列书之一. BS... ---update--- 翻译的不错,较用心,诸多评注
讲些基础的编程注意事项,还不错
排版真是太差了
暑假时期 理解的不是很好
有些笑话好冷……
书是好书,内容有些旧了
一天看完,太老了所以很多东西已经无需再提,适合小白看看
那个年代这是本好书,但是时过境迁很多书里说的问题现在已经不成立了。不适合新手看,不仅很多书里的问题在当前C标准、流行的C编译器下不存在,这本书里提到的很多问题甚至是ANSI C提出之前的问题。的确书里提到的一些值得注意的陷阱现在还存在,瑕不掩瑜,但是确实有点过时了,不适合还在看C教材 的新手。
有些地方还是比较晦涩...感觉现实中很少用到。
薄薄一本,贵喔
下载
收藏