
安德鲁·凯尼格
《C陷阱与缺陷》作者以自己1985年在贝尔实验室时发表的一篇论文为基础,结合自己的工作经验将这篇论文扩展成对C程序员具有珍贵价值的经典著作。本书的出发点不是批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。《C陷阱与缺陷》分为8章,分别从词法陷阱、语法陷阱、语义陷阱、链接、库函数、预处理器、可一致性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。《C陷阱与缺陷》适合有一定经验的C程序员阅读学习,即便你是C编程高手,本书也应该成为你的案头必备图书。
多年前,我是看不懂本书的。C虽然是高级语言,但是相对其他高级语言来说,它过于面向底层,它是对汇编的进一步抽象。要真正理解C,必须理解操作系统,理解CPU,理解内存,甚至理解C是怎样编译的。指针的本质是对内存访问的抽象,理解了内存的原理,也就理解了指针。人们往往误以为指针就是内存地址,其实二者是有区别的。指针是一种类型,它的值是内存地址,而不是数据。所以指针变量存放的是内存地址,而不是内存地址对应的数据。内存地址是基于字节的,但由于指针具有类型,所以它指向了一段内存,这段内存的大小取决于其类型,而指针存储的就是这段内存的起始地址。
想要自由,就需要有代价。 C 教会你“责任与控制: 你分配的内存必须自己释放; 你定义的结构必须自己维护; 你组织的模块必须自己管理依赖;
我阅读此书,一方面是为了查漏补缺,看一下自己对C语言的理解和使用是否尚有不到位的地方,另一方面是想温习一下相关的知识,用以准备一个算法比赛。当然,因为作者本身是C的专家,他提到“缺陷”,我还是想看看他对此的高见,不过,这倒是我的误会了。 本书的写作目的并非是为了挑C语言的毛病或者缺陷,而是为了指出使用C时容易犯下的错误。(标题中的pitfalls本意也是“陷阱”,而非“缺陷”的意思,不知道这个“缺陷”是否是某些特定语境下延伸出来的扩展意?) 我快速过了一下这本书,然后发现这本书的内容多少有些过时了,举的例子有些还是关于Fortran语言的,当然这也是没办法的事,毕竟本书最初源于作者1978年写的一篇论文。不过,我感到很幸运的一件事是,我当时看的C入门书籍是哈工大苏小红老师的《C语言程序设计》,书中的内容简单易懂,也有提及Andrew在本书指出的一些注意事项,算是为我的C语言打下了一个不错的基础吧。 下面是关于本书的一些摘抄: 我们应该坚持只使用C语言中众所周知的部分,而避免使用那些“生僻”的语言特性。程序的生命期往往要长于它运行其上的机器的生命期。用类来表示概念。类设计就是语言设计,语言设计就是类设计。C++在运行时性能上做了一个很好的折中,能够在“一切都是对象”的语言和“避免任何抽象”的语言之间取得恰到好处的平衡。这就是C++的实用性。
C里面一些看起来正常,但结果出人意料的易错集。
计算机巨佬写的C语言排坑指南,豆瓣评分高达恐怖的9.8分! 书中针对语法陷阱、语义陷阱、预处理、可移植性、库函数等做了细致地阐述。 本书成文较早,篇幅也不长,但是绝对是查漏补缺、温故知新的案头书。
本书对于补充C的基础知识很重要,特别是转专业的,之前仅注意上层层面的程序编写,对于与具体机器实现相关(编译器)等不关心的,这本书帮助很大。因为实际工作过程中,会涉及到不同的编译器实现不同,而如果没有意识到本书中所说的知识,你会觉得公司的代码规范很奇怪。
书中的内容已经显得有些老旧,部分用例在现代编译环境中不会报相同的错误 总体来说还是推荐C语言开发者浏览一遍,以增强对C的理解,如果有些C语言开发经验,阅读起来并不困难
除了前面函数指针原型部分,其他没什么收获
能力一般,水平有限。一些内容看不懂,一些内容觉得有点过时。但重要的是,还有一部分内容让我获益良多。
纸质版的比较便宜,很经典,读完受益匪浅。