最终的C书指南和列表

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

C是一种复杂的编程语言,通过阅读在线教程很难随身携带。 综合性的书往往是学习语言的最好方式,find一本好书是第一步。 避免写得不好的书籍,更重要的是要避免包含严重技术错误的书籍。

请build议编辑接受的答案,以增加高质量的书籍,大概的技能水平和每本书的简短介绍/描述。 (请注意,这个问题是locking的,所以不会有新的答案被接受。

随意辩论书的select,质量,标题,总结,技能水平,以及任何你看到的是错误的。 这里被C社区认为满意的书籍将一直在名单上; 其余的将被定期删除。

对于由C和C ++用户协会(ACCU)进行评审的书籍,应该在书中附加一个链接。

也可以看看:

  • C 标签wiki中的其他C相关资源
  • C ++的类似列表: The Definitive C ++ Book Guide and List

参考(所有级别)

  • C编程语言(第2版) – Brian W. Kernighan和Dennis M. Ritchie(1988)。 对C语言的发明者来说,C语言还是一个很好的,简短而完整的介绍。然而,在过去的25年里,语言已经发生了变化,C语言风格已经发展了,书中的一些部分也显示了它的年代。

  • C:参考手册(第5版) – Samuel P. Harbison和Guy R. Steele(2002)。 关于C的一本很好的参考书,直到C99。 这不是一个教程,可能不适合初学者。 如果您需要为C编写一个编译器,那就太好了,因为作者在开始时必须这样做。

  • C口袋参考(O'Reilly) – 彼得Prinz和Ulla Kirch-Prinz

  • comp.lang.c常见问题 – Steve Summit。 网站的答案很多,关于C的问题

  • C语言标准的各种版本可以在这里find。

  • 新的C标准 – 一个注释参考 (免费PDF) – 德里克M.琼斯。 所提到的“新标准”是旧的C99标准,而不是C11。

  • C99标准的基本原理


初学者

  • C编程(第4版) – Stephen Kochan(2014)。 一个很好的一般介绍和教程。

  • C Primer Plus(第5版) – Stephen Prata(2004)

  • C编程:现代方法(第2版) – KN King(2008)。 一本学习C的好书

  • 一本关于C – Al Kelley / Ira Pohl的书

  • C书 (免费在线) – Mike Banahan,Declan Brady和Mark Doran

  • 实用的C编程(第三版) – Steve Oualline(1997)

  • C:如何编程(第六版) – Paul Deitel和Harvey M. Deitel。 对于初学者有很多好的提示和最佳实践。 该指数非常好,作为一个体面的参考(只是不全面,很浅)。

  • 首先C – 大卫格里菲斯和黎明格里菲斯

  • C开头(第5版) – 伊沃·霍顿。 指针很好的解释,使用大量小而完整的程序。

  • 萨姆斯21天教你自己C – 布拉德利L.琼斯和彼得艾特肯(2002年)。 非常好的介绍性的东西。

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

中间

  • ANSI-C面向对象编程 (免费PDF) – Axel-Tobias Schreiner

  • C接口和实现 – David R. Hanson。 提供有关如何以通用和可重用的方式在C中定义接口和实现之间的边界的信息。 它还通过将其应用于C中常见机制和数据结构的实现(如列表,集合,exception,string操作,内存分配器等)来演示此原则。 基本上,汉森把他写的所有代码作为构buildIcon和lcc的一部分,并以其他人可以重复使用的forms提取出最好的代码。 这是使用现代devise技术(包括Liskov的数据抽象)的良好C编程模型,展示了如何将一个大型C项目组织成一堆有用的库。

  • C谜题书 – Alan R. Feuer(1998)

  • 标准C图书馆 – PJ Plauger(1992)。 它包含了C89标准库实现的完整源代码,以及关于devise和为什么代码如图所示devise的广泛讨论。

  • 21世纪的C::新学派的C提示 – Ben Klemens(2012)。 除了C语言,本书还介绍了gdb,valgrind,autotools和git。 关于风格的评论见最后部分(第6章及以后)。

  • algorithm在C – 罗伯特Sedgewick。 给你一个用C实现algorithm的真正把握。非常清晰明了; 可能会让你想扔掉所有其他的algorithm书籍,并保留这一个。

  • C上的指针 – Kenneth Reek

  • 在C – Naveen Toppo和Hrishikesh Dewan的指针

  • C中的问题解决和程序devise(第6版) – Jeri R. Hanly和Elliot B. Koffman(2009)。

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

  • C释放 – 理查德Heathfield,劳伦斯柯比,等人。 (2000年)。 不是很理想,但值得中级程序员练习写在本书中的问题。 这是comp.lang.c贡献者所build议的类似于烹饪的方法。

专家

  • Expert C Programming:Deep C的秘密 – Peter van der Linden(1994)。 Sun编译器团队提供了许多有趣的信息和战争故事,但有点过时了。

  • 高级C编程实例 – John W. Perry

  • UNIX环境下的高级编程 – Richard W. Stevens和Stephen A. Rago(2013)。 如何从C代码中使用Unix API的全面描述,而不是关于C编码的机制。

  • 先进的C:为受教育的口味的食物 – Narain Gehani(1985)。 很棒的指针,指向函数的指针,以及各种高级主题,比如内存中存储的内容,dynamic内存,堆栈使用情况,函数调用,parameter passing等等。假定您已经掌握了C开头的知识。 警告:早于ANSI标准和许多现代编程devise。

  • 计算机编程:科学倾斜的介绍 – 桑德斯托克(2008)。 关于编程语言科学使用的好书。

  • 逆向:逆向工程的秘密 – Eldad Eilam(2005)。 对那些想要testing他们道德底线的人来说。


未分类

  • Essential C (免费PDF) – Nick Parlante。 请注意,这在几个地方描述了C90语言( 例如 ,在讨论//在代码中的任意点处的variables声明的注释和放置),所以应该谨慎对待。

  • C编程常见问题:常见问题 – Steve Summit(1995)。

  • C在坚果壳 – 彼得·普林斯和托尼·克劳福德(2005)。 如果您需要C99的参考资料

  • functionC – Pieter Hartel和Henk Muller(1997)。 教授现代的实践,对于低级编程是非常宝贵的,同时考虑到并发性和模块化。

  • 编程的实践 – 布赖恩W·Kernighan和罗伯·派克(1999年)。 一本很好的书,陪伴K&R。

  • C.Cenig(1989)的“ C陷阱和陷阱” 。 非常好,但C风格的预制标准C,这使得这些日子不太值得推荐。

    有些人认为,从这份名单中删除“陷阱和陷阱”是因为它让一些人陷入犯错; 其他人则继续争论。 也许它应该被看作是一本“专家”的书,因为它需要对C有广泛的了解才能理解自发布以来发生的变化。

  • 计算机系统:程序员的视angular(第3版) – Randal E. Bryant和David R. O'Hallaron(2015)。 用一种脱节的叙事风格来解释C语言,比如低俗小说

  • 程序开发中的抽象和规范 – Barbara Liskov和John V. Guttag(1986)( 不仅仅是 Liskov最新的基于Java的版本)。 这是一本本科的文章,有一些值得思考的想法。

  • 复合/结构devise – Glenford J. Myers(1978)。 Yourdon和Myers在20世纪70年代末和80年代初的这本书和其他书籍提供了有关结构化devise的杰出见解。

  • build立你自己的Lisp 。 一个愉快的方式来学习C.

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

    虽然这不是一本书,但每个有经验的C程序员都应该尽可能多地阅读和实现。 MISRA-C最初是作为安全关键应用的指导原则,但是它适用于任何需要稳定,无缺陷的C代码的应用领域(谁不希望有更less的错误?)。 MISRA-C正在成为整个embedded式行业的事实标准,并且即使在其他编程分支中也越来越受欢迎。 这个标准至less有三个出版物,一个是1998年的,一个是2004年的,另一个是2012年的,最后一个是现行的,相关的。 还有一个从2016年开始的MISRA合规指南文件,以及MISRA C:2012修订版1 – MISRA C:2012的附加安全指南(2016年4月发布)。
    请注意,MISRA规则中的一些限制不适用于每个环境。 例如,指令4.12指出“不应使用dynamic内存分配”。 这对于deviseMISRA规则的embedded式系统来说可能是合适的。 到处都不合适。 (举例来说,编译器通常使用dynamic内存分配来处理象符号表之类的事情,如果不是dynamic内存分配,则很难实现,如果不是荒谬的话)。

  • 存档清单ACCU审查的新手C (116题)和高级C (76题)的书籍。 大多数这些不再在主站点上,而且无论如何也不能按照主题来浏览。


警告

小心Herbert Schildt写的书。 特别是,你应该远离C:The Complete Reference ,在某些圈子中被称为C:完全的废话。

也要警惕Yashwant Kanetkar的“Let Us C”一书。 这是一本可怕的过时的书,教Turbo C,有很多过时的,误导性的和完全不正确的材料。

学习C的艰辛之路 – Zed Shaw。 这本书的批评 :

总结一下我的观点,笔者以极其过分简单和误导的方式提出了这个材料,整个主题是一团乱麻,他提供的一些意见和分析是错误的。 我试图通过新手的眼光来看这本书,但不幸的是,我有多年的写C代码的经验是有偏见的。对我来说很明显,作者对C有缺陷的理解,或者他故意过于简单化指出他实际上误导了读者(有意或无意)。

“学习C的艰辛之路”并不是一本我可以推荐给既学习编程又学习C的人的书。如果你已经是一个能胜任的其他相关语言的程序员,那么它就代表了一个有趣而不寻常的C,尽pipe我对本书的某些部分有所保留。 乔纳森·莱弗勒


其他贡献者 ,未记入修订历史:
亚历克斯·洛克伍德 , 本jackson , 泡沫 , 爪 , coledot , 达纳罗宾逊 , 丹尼尔霍尔顿 , Dervin Thunk , dwc , 侯赛因 , Garen , haziz , 约翰Bezem , 乔纳森Leffler , 约书亚Partogi , 卢卡斯 , Lundin , 马特K. , mossplix , Matthieu M. , midor , Nietzche-jou , Norman Ramsey , r3st0r3 , ridthyself , Robert S. Barnes , Tim Ring , Tony Bai , VMAtm