权威C书指南和清单


The Definitive C Book Guide and List

这个问题试图收集一个社区维护的关于C编程语言的高质量书籍清单,针对不同的技能水平。

C是一种复杂的编程语言,通过阅读在线教程很难在旅途中学会。一本综合性的书往往是学习语言的最好方法,找到一本好的书是第一步。重要的是要避免写得不好的书,更重要的是要避免包含严重技术错误的书。

请建议对接受的答案进行编辑,以添加高质量的书籍,并提供大致的技能水平和每本书的简短宣传/描述。(请注意,问题已锁定,因此不会接受新的答案。列表中只保留一个答案)

可以自由讨论书籍的选择、质量、标题、摘要、技能水平,以及任何你认为错误的地方。C社区认为令人满意的书将留在名单上,其余的书将定期删除。

对于由C和C++用户协会(ACCU)进行评论的书籍,应该连同书一起添加到这些评论的链接。

参见:

  • c tag wiki中的其他c相关资源
  • C++的类似列表:权威C++指南和列表

此问题已在meta上讨论,作为2018年删除问题审计的一部分。一致意见是保持其未删除并积极维护。


警告好的。

这是一本质量参差不齐的书。在某些人看来(有些理由),它不再是推荐书的列表。所列的一些书籍含有明显不正确的陈述或教导错误/有害的做法。了解此类书籍的人可以编辑此答案以帮助改进。看C书的单子坏掉了。怎么处理它?同时删除了2018年问题审计。好的。参考(所有级别)

  • C编程语言(第二版)-Brian W.Kernighan和Dennis M.Ritchie(1988)。仍然是C的发明者写的一个很好的,简短但完整的C介绍(C90,而不是C99或更高版本)。然而,语言已经改变了,在过去的25年中,良好的C风格已经发展起来,书中有一些部分显示了它的年龄。好的。

  • C:参考手册(第5版)-塞缪尔·P·哈比森和盖伊·R·斯蒂尔(2002)。一本关于C的优秀参考书,最多包括C99。它不是一个教程,可能不适合初学者。如果你需要为C编写一个编译器,那就太好了,就像作者刚开始时所做的那样。好的。

  • C Pocket Reference(O'Reilly)-Peter Prinz和Ulla Kirch Prinz(2002年)。好的。

  • 公司语言常见问题-史蒂夫峰会。网站上有许多关于C的问题的答案。好的。

  • 这里可以找到C语言标准的各种版本。有C11标准草案的在线版本。好的。

  • 新的C标准-注释参考(免费PDF)-德里克M.琼斯(2009年)。所指的"新标准"是旧的C99标准,而不是C11标准。好的。

  • C99标准的基本原理。好的。

初学者

  • C语言编程(第4版)-Stephen Kochan(2014年)。一个好的一般介绍和教程。好的。

  • C Primer Plus(第5版)-Stephen Prata(2004年)好的。

  • C编程:现代方法(第二版)-K.N.King(2008)。学习C的好书。好的。

  • 关于C-al-Kelley/Ira Pohl的书(1998年)。好的。

  • C书(免费在线)-迈克·巴纳汉,德克兰·布雷迪和马克·多兰(1991)。好的。

  • C:如何编程(第8版)-Paul Deitel和Harvey M.Deitel(2015年)。对于初学者来说,有很多好的提示和最佳实践。该指数非常好,可以作为一个不错的参考(只是不够全面,而且很浅)。好的。

  • 头一C-大卫格里菲斯和黎明格里菲斯(2012年)。好的。

  • 开始C(第5版)-Ivor Horton(2013)。很好地解释了指针,使用了许多小而完整的程序。好的。

  • Sams在21天内自学C-Bradley L.Jones和Peter Aitken(2002年)。很好的入门材料。好的。

  • ANSI C中的应用程序编程-Richard Johnsonbaugh和Martin Kalin(1996)。好的。

中间的

  • 使用ansi-c(免费pdf)进行面向对象编程-axel-tobias-schreiner(1993)。代码有点复杂。如果你想要C++,使用C++。好的。

  • C接口和实现-David R.Hanson(1997)。提供有关如何以通用和可重用的方式在C中定义接口和实现之间的边界的信息。它还通过将其应用于C中常见机制和数据结构的实现来演示这个原则,例如列表、集合、异常、字符串操作、内存分配器等等。基本上,汉森将他编写的所有代码作为构建图标和LCC的一部分,并以其他人可以重用的形式提取出最好的部分用于自己的项目。它是一个使用现代设计技术(包括Liskov的数据抽象)进行良好C编程的模型,展示了如何将一个大型C项目组织为一组有用的库。好的。

  • C字谜书-艾伦R.费尔(1998)好的。

  • 标准C图书馆-P.J.Plauger(1992)。它包含了C89标准库实现的完整源代码,以及有关设计和代码设计原因的广泛讨论,如图所示。好的。

  • 21世纪C:C新学校的提示-Ben Klemens(2012)。除了C语言,这本书还解释了gdb、valgrind、autotools和git。关于风格的评论见最后一部分(第6章及以后)。好的。

  • C-Robert Sedgewick(1997)中的算法。让您真正掌握C语言中的算法实现。非常清楚和清晰;可能会让您想扔掉所有其他算法书籍并保留这本。好的。

  • C-Kenneth Reek(1997)上的指针。好的。

  • C-Naven Toppo和Hrishikesh Dewan的指针(2013年)。好的。

  • C(第6版)中的问题解决和程序设计——Jeri R.Hanly和Elliot B.Koffman(2009年)。好的。

  • 数据结构-使用C-Jeffrey Esakov和Tom Weiss(1989)的高级方法。好的。

  • C释放-Richard Heathfield、Lawrence Kirby等人(2000)。不理想,但值得中级程序员练习这本书中写的问题。这是comp.lang.c贡献者建议的一种类似食谱的方法。好的。

  • 现代C-Jens Gustedt(2017年)。从C开始到高级C分为5个级别(遭遇、熟识、认知、经验、抱负)。它涵盖了C11线程和原子访问,其他书籍很少,并非所有编译器都能在所有环境中识别这些线程和原子访问。

专家

  • 专家C编程:深层C秘密-彼得范德林登(1994)。来自Sun编译器团队的许多有趣的信息和战争故事,但有些地方有点过时。好的。

  • 高级C编程示例-John W.Perry(1998)。好的。

  • Unix环境中的高级编程-Richard W.Stevens和Stephen A.Rago(2013)。对如何使用C代码中的UnixAPI进行了全面的描述,但对C代码的机制没有太多的描述。好的。

未分类

  • Essential C(免费PDF)-Nick Parlante(2003年)。请注意,这在几个方面描述了C90语言(例如,在讨论//注释和在代码中任意点放置变量声明时),因此应该谨慎对待。好的。

  • C编程常见问题:常见问题-Steve Summit(1995)。这是前面列出的网站书籍。它不包括C99或更高标准。好的。

  • 简而言之,彼得·普林茨和托尼·克劳福德(2005年)。如果你需要C99的参考书的话,这本书很好。好的。

  • 功能C-Pieter Hartel和Henk Muller(1997)。教授对低级编程非常有价值的现代实践,同时考虑到并发性和模块性。好的。

  • 编程实践-Brian W.Kernighan和Rob Pike(1999)。一本非常好的书,用于K&AM.R。它也使用C++和Java。好的。

  • C.A.Koenig(1989)的陷阱和陷阱。很好,但C风格的预日期标准C,这使得它不太推荐这些天。好的。

    一些人主张将"陷阱和陷阱"从这个列表中删除,因为它使一些人陷入了犯错的境地;另一些人则继续主张将其包括在内。也许它应该被视为一本"专家"书,因为它需要C的适度广泛的知识来理解自它出版以来所发生的变化。好的。

  • 创建自己的Lisp-Daniel Holden(2014年)。学习C的愉快方式。好的。

  • MISRA-C-由汽车工业软件可靠性协会发布和维护的行业标准。包括C89和C99。好的。

    尽管这不是一本这样的书,但是每个有经验的C程序员都应该尽可能多地阅读和实现它。MISRA-C最初是专门针对安全关键应用程序的指导方针,但它适用于需要稳定、无缺陷C代码的任何应用领域(谁不希望更少的错误?).misra-c正在成为整个嵌入式行业的事实标准,甚至在其他编程分支中也越来越流行。本标准至少有三种出版物(1998年、2004年和2012年的现行版本)。此外,还有一份来自2016年的MISRA合规指南文件,以及MISRA C:2012修正案1——MISRA C:2012附加安全指南(2016年4月出版)。请注意,米斯拉规则中的一些限制并不适用于每一个上下文。例如,指令4.12规定"不得使用动态内存分配"。这在设计了misra规则的嵌入式系统中是合适的;它不适用于任何地方。(例如,编译器通常对符号表之类的事物使用动态内存分配,如果没有动态内存分配,即使不是荒谬的,也很难做到。)好的。

  • 从2007年起,Accu对初学者C(116个标题)和高级C(76个标题)的书籍进行了审查。其中大部分看起来不再是主网站,而且你无论如何也不能按主题浏览。好的。

警告

提防赫伯特·希尔德写的书。特别是,你应该远离C:完整的参考文献(2000年第4版),在一些圈子里被称为C:完全的胡说八道。好的。

也要警惕Yashwant Kanetkar的《让我们C》(第16版,2017年)一书。有些人认为这是一本过时的书,教turbo c,有很多过时的,误导性的,完全错误的材料。好的。

学习C硬道(2015),作者:Zed Shaw。评论参差不齐的书Tim Hentenaar对这本书的评论:好的。

To summarize my views, which are laid out below, the author presents the material in a greatly oversimplified and misleading way, the whole corpus is a bundled mess, and some of the opinions and analyses he offers are just plain wrong. I've tried to view this book through the eyes of a novice, but unfortunately I am biased by years of experience writing code in C. It's obvious to me that either the author has a flawed understanding of C, or he's deliberately oversimplifying to the point where he's actually misleading the reader (intentionally or otherwise.)

Ok.

"学习C难的方法"不是我可以推荐给学习编程和学习C的人的一本书。如果你已经是其他相关语言的合格程序员,那么它代表了一个有趣的和不寻常的关于C的论述,尽管我对这本书的某些部分有所保留。jonathan leffler好的。过时的

  • 实用C程序设计(第三版)-Steve Oualline(1997)(初学者)

其他贡献者,未记入修订历史:Alex LockwoodBen Jackson泡沫,爪,科莱多Dana RobinsonDaniel HoldenDervin ThunkDWC佴瓷候Garen哈齐兹Johan Bezem乔纳森·莱弗勒,Joshua Partogi卢卡斯伦丁Matt K.莫斯普利克斯Matthieu M.米多尔尼采,Norman RamseyR3ST0R3,自我,罗伯特·S·巴恩斯,Tim RingTony BaiVMATM好的。好啊。