C陷阱与缺陷

Andrew Koenig

出版时间

2003-11-30

ISBN

9787115106230

评分

★★★★★
书籍介绍
这不是一本教你写C的书,而是一本提醒你别在C里栽跟头的书。全书不过百来页,开篇几章多是'地球人都知道'的常识——字符串末尾的\0、单引号与双引号的区别、八进制数的写法——但正是这些被随手放过的细节,在毕业面试、笔试乃至真实项目里一次次让人掉坑。作者把多年踩过的坑系统梳理成词法、语法、语义、连接、库函数、预处理器、可移植性七类,篇幅克制,却像一份'排雷清单'。它适合刚脱离'能跑就行'阶段、开始在意边界与移植性的程序员,也适合在面试前想快速唤醒直觉的人。缺点也实在:内容偏旧、非ANSI C、与《C和指针》《C专家编程》略有重叠。但正因简短,它值得放在书架上随时翻查。
AI导读
核心看点
  • 剖析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 修饰符声明。"
目录
第零章 导读
第一章 词法“陷阱”
第二章 语法“陷阱”
第三章 语义“陷阱”
第四章 连接

显示全部
用户评论
经典必读书籍
我得买本第二版的去……
从西校区图书馆借来的,几经波折...
书不错,内容有点老
有几个小知识点以前没注意过,当再学习了。
技术书籍总赶不上技术的发展
内容较老, 但是有几个点是可以提醒自己的, 背后附有答案很贴心
2013-12-18 主题阅读:编程语言发展史
17年看的,大都是些自己已经知道的东西。
有电子版,中文,有目录
下载
收藏