具体描述
作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。..
全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。..
本书适合有一定经验的C程序员阅读学习,即便你是C编程高手,本书也应该成为你的案头必备书籍。
作者简介
Andrew Koenig 是AT&T公司Shannon实验室大规模编程研究部门中的成员,同时也是C++标准委员会的项目编辑。他的编程经验超过30年,其中有15年在使用C++,他已经出版了超过150 篇和C++有关的论文,并且在世界范围内就这个主题进行过多次演讲。
目录信息
第1章 词法“陷阱”
1.1 =不同于==
1.2 & 和 | 不同于&& 和 ||
1.3 词法分析中的“贪心法”
1.4 整型常量
1.5 字符与字符串
第2章 语法“陷阱”
2.1 理解函数声明
2.2 运算符的优先级问题
2.3 注意作为语句结束标志的分号
2.4 switch语句
2.5 函数调用
2.6 “悬挂”else引发的问题
第3章 语义“陷阱”
3.1 指针与数组
3.2 非数组的指针
3.3 作为参数的数组声明
3.4 避免“举隅法”
3.5 空指针并非空字符串
3.6 边界计算与不对称边界
3.7 求值顺序
3.8 运算符&&、|| 和 !
3.9 整数溢出
3.10 为函数main提供返回值
第4章 连接
4.1 什么是连接器
4.2 声明与定义
4.3 命名冲突与static修饰符
4.4 形参、实参与返回值
4.5 检查外部类型
4.6 头文件
第5章 库函数
5.1 返回整数的getchar函数
5.2 更新顺序文件
5.3 缓冲输出与内存分配
5.4 使用errno检测错误
5.5 库函数signal
第6章 预处理器
6.1 不能忽视宏定义中的空格
6.2 宏并不是函数
6.3 宏并不是语句
6.4 宏并不是类型定义
第7章 可移植性缺陷
7.1 应对C语言标准变更
7.2 标识符名称的限制
7.3 整数的大小
7.4 字符是有符号整数还是无符号整数
7.5 移位运算符
7.6 内存位置0
7.7 除法运算时发生的截断
7.8 随机数的大小
7.9 大小写转换
7.10 首先释放,然后重新分配
7.11 可移植性问题的一个例子
第8章 建议与答案
8.1 建议
8.2 答案
附录A PRINTF,VARARGS与STDARG
附录B Koenig和Moo夫妇访谈
· · · · · · (收起)
读后感
【P97 -L5】 toupper(int c) { if(c >= 'a' && c <= 'z') c += 'A' ? 'a'; return c; } 看到这心想,哦印刷错误。翻过一页,说到把它实现为宏: #define toupper(c) ((c) >= 'a' && (c) <= 'z' ? (c) + ('A'?'a') : (c)) 然后就想知道原书是怎样...
最近想读linux0.11源码,觉得C语言还要再学习。这本书写得非常通俗。比如,C编译器词法分析时采用贪心法解析,这样 y=c/*p /*注释*/ 最终解释成y=c,类似于正则表达式的*,太妙了。 又比如,C语言定义时,按使用时的方法解读;还比如,C语言赋值采用=,而比较是用==,原因是...
这是一本小册子,有让人继续读下去的欲望,倒不是因为页数少好欺负,是因为书中所说的几乎所有需要注意的地方作为一个程序员都有可能遇到,作者叙述起来很有意思,丝毫没有说教的感觉,举的例子很简单却一针见血。 此书作为一本常备读物是非常合适的,没事经常翻翻加深印象。
这本书的主题是C中的各类细节,平时往往不会注意。 1.注释的嵌套性,怎么判断编译器是否允许嵌套注释。 2.运算符优先级,结合顺序,编译器贪婪 3.assert的实现方法,避免if 4.少敲一个分号导致各种血案 5.注意函数、if等的作用域。 6.注意字符集,防止移植性问题 7.变长参数,...
这本书是我的第二本C语言书,大学学的谭老的书不算。 也许是《C语言程序设计现代方法》一书过于详尽的原因,而且毕竟也有着一些编程基础,在读这本书的时候我读的很快。 这不是讲C语言基础的书,而是从一些C语言的特性入手,讲C语言编程时容易出现的错误,以及一些最佳实践。...
用户评价
我是一名有着几年C语言开发经验的程序员,在工作中,我自认为对C语言已经相当熟悉了,甚至敢于挑战一些复杂的问题。然而,当我翻开这本书时,我才发现自己是多么的“坐井观天”。这本书的深度和广度都远超我的预期。它不仅仅是列举了一些常见的错误,而是深入到了C语言规范的细节,那些我从未在意过的边缘情况,竟然隐藏着如此巨大的隐患。书中对一些“未定义行为”的解释尤其让我感到震撼,我之前常常凭借经验去猜测,认为某些代码在这种情况下会这样运行,但这本书却用严谨的论证告诉我,这些猜测是多么危险。尤其是一些涉及到编译器优化、类型转换、浮点数运算等方面的分析,简直是把我之前的一些模糊认识彻底颠覆了。读这本书,就像是在和一位经验极其丰富的老前辈对话,他用一种“过来人”的视角,将那些血泪史总结成宝贵的经验,毫不保留地传授给你。每一次阅读,我都能发现新的知识点,或者对旧的知识点有更深刻的理解。这本书的价值在于,它不仅仅告诉你“不要做什么”,更重要的是告诉你“为什么不要做什么”,以及如何规避这些潜在的风险。对于像我这样希望在C语言领域不断进步的开发者来说,这本书无疑是一笔宝贵的财富。
我一直认为,学习一门编程语言,不仅仅是掌握它的语法和API,更重要的是理解它背后的设计哲学以及可能存在的“坑”。《C陷阱与缺陷》这本书,恰好满足了我对这种深入理解的需求。它并没有回避C语言那些令人头疼的特性,反而将它们摆在我面前,让我直面挑战。我尤其喜欢书中对那些“看似无害”的代码片段进行深入剖析,揭示它们背后隐藏的潜在危险。比如,书中对某些数据类型的边界条件、运算符的优先级以及函数调用栈的管理等方面的讲解,都让我对C语言有了全新的认识。我常常在阅读的过程中,会主动去思考,自己过去的代码是否有类似的隐患。这本书的讲解方式非常生动,不像某些技术书籍那样枯燥乏味,反而带有一种探索的乐趣。它让我明白,写出“能运行”的代码只是第一步,写出“健壮且可维护”的代码才是真正的目标。这本书的价值,在于它能够帮助我规避很多低级的错误,从而将精力更多地投入到解决真正的问题上。对于每一个认真对待C语言的开发者来说,这本书都值得反复阅读和品味。
这本书真是让我大开眼界,虽然我只是一个初涉C语言的爱好者,但这本书的引人入胜之处让我欲罢不能。它没有枯燥乏味的理论堆砌,而是通过一个个鲜活的、真实的案例,将C语言中那些隐藏极深、极易被忽视的“陷阱”和“缺陷”生动地呈现在我面前。我常常在想,为什么我之前写代码的时候会出现那些奇怪的bug,有时候花了好几个小时都找不到原因,现在看来,很多时候就是因为我掉进了这些“陷阱”里。书中的例子讲解得非常透彻,从根本上剖析了问题的根源,让我不仅知道了“是什么”,更明白了“为什么”。我尤其喜欢那些关于指针和内存管理的章节,虽然它们常常是新手们的噩梦,但这本书的讲解方式却像一位循循善诱的老师,一步步引导我拨开迷雾,理解那些抽象的概念。读完这些章节,我感觉自己对C语言的理解上升了一个新的高度,不再是简单的代码堆砌,而是对底层原理有了更深刻的认识。而且,这本书的语言风格也很吸引人,并不像很多技术书籍那样生硬刻板,反而带有一丝幽默感,读起来一点都不觉得枯燥。总而言之,这是一本让我受益匪浅的书,强烈推荐给所有想要深入理解C语言的读者。
说实话,我一开始是被这本书的书名吸引的。《C陷阱与缺陷》这个名字听起来就充满挑战性,而且我一直对那些隐藏在语言深处的“坑”很好奇。读完之后,我发现这本书的内容远比我想象的要精彩得多。它不是一本教你如何写出“正确”代码的书,而是一本让你深刻理解“为什么”会出错的书。作者用一种非常巧妙的方式,将那些看似微不足道的细节,串联成一个个引人入胜的故事。我特别欣赏书中对某些“安全”代码的误解的探讨,很多时候,我们自以为写得很安全,但实际上却因为对C语言内部机制理解不透彻,而埋下了定时炸弹。这本书的讲解方式非常细致,它不会简单地给出结论,而是会一步步地引导你去思考,去发现问题出现的根本原因。我常常在读到某个章节的时候,会立刻回想起自己过去写过的代码,恍然大悟,原来当初那个棘手的bug就是因为掉进了这里的“陷阱”。这本书给我的感觉,就像是在玩一个高难度的侦探游戏,你需要仔细分析每一个线索,才能最终找出罪魁祸首。对于那些想要修炼内功,提升代码健壮性的程序员来说,这本书绝对是不二之选。
作为一名资深的C语言研究者,我阅读过大量的C语言相关书籍,但《C陷阱与缺陷》这本书给我留下了极为深刻的印象。它以一种非常独特的视角,揭示了C语言在设计和实现过程中所固有的一些“缺陷”,以及开发者在不经意间容易陷入的“陷阱”。书中对C标准中那些模棱两可的描述,以及由此产生的不同编译器行为的分析,可谓入木三分。我尤其赞赏作者对于那些“未定义行为”的系统性梳理和解释,这对于理解C语言的本质至关重要。很多时候,我们所谓的“好用”的特性,背后可能隐藏着难以预测的风险。这本书恰恰是将这些风险暴露在阳光下,并且给出了清晰的应对之道。它并非一本简单的“避坑指南”,而更像是一本C语言的“武功秘籍”,让你了解那些招式的破绽,从而练就更强的防御能力。书中对于某些经典的C语言bug的案例分析,更是让我惊叹于作者的洞察力。总而言之,这是一本能够极大提升开发者对C语言理解深度和广度的书籍,对于追求极致代码质量的同行而言,其价值无可估量。
总体不错,作为ansi c标准出台之前的一本小册子,性价比颇高。几点不足:一是本书中文版的代码排版实在很有问题。二是书上有一些代码和单词的错误。
真是学到不少东西,接着要看C++了
一口气读完,很爽
其实可以只看前3章。另外,书中有些提到的C语言缺陷现在已经不复存在了,比如C语言中是否大小写敏感的问题。
小巧精致,有收获。