[英]The Definitive C Book Guide and List
这个问题试图收集一个社区维护的关于c编程语言的优质书籍列表,针对不同的技能水平。
C 是一种复杂的编程语言,很难通过阅读在线教程随时随地掌握。 一本综合性的书往往是学习语言的最好方法,而找到一本好书是第一步。 避免写得不好的书很重要,更重要的是,避免包含严重技术错误的书。
请建议对已接受的答案进行编辑以添加高质量的书籍,并附上大致的技能水平和关于每本书的简短介绍/描述。 (请注意,问题已锁定,因此不会接受新答案。列表中只保留一个答案)
随意辩论书籍的选择、质量、标题、摘要、技能水平以及您认为错误的任何其他内容。 此处 C 社区认为令人满意的书籍将留在列表中; rest 将定期移除。
对于有 C 和 C++ 用户协会 (ACCU) 评论的图书,应在图书中添加指向这些评论的链接。
也可以看看:
这个问题在Meta上作为2018 年已删除问题审计的一部分进行了讨论。
共识是保持它不被删除并积极维护。
警告!
这是一份不同质量的随机书籍清单。 在某些人看来(有一定道理),不再是推荐书单。 一些列出的书籍包含明显不正确的陈述或教导错误/有害的做法。 知道此类书籍的人可以编辑此答案以帮助改进它。 请参阅C 书籍列表已经失控。 怎么办? ,以及2018 年删除的问题审计。
C 编程语言(第 2 版) - Brian W. Kernighan 和 Dennis M. Ritchie(1988 年)。 仍然是 C 的发明者编写的很好、简短但完整的 C 介绍(C90,而不是 C99 或更高版本)。但是,在过去的 25 年中,语言发生了变化,并且形成了良好的 C 风格,并且有部分显示其年代的书。
C:参考手册(第 5 版) - Samuel P. Harbison 和 Guy R. Steele (2002)。 一本关于 C 的优秀参考书,直到并包括 C99。 这不是教程,可能不适合初学者。 如果您需要为 C 编写编译器,那就太好了,因为作者在开始时必须这样做。
C Pocket Reference (O'Reilly) - Peter Prinz 和 Ulla Kirch-Prinz (2002)。
comp.lang.c 常见问题解答- Steve Summit。 提供有关 C 的许多问题的答案的网站。
新的 C 标准 - 带注释的参考(免费 PDF) - Derek M. Jones (2009)。 所指的“新标准”是旧的 C99 标准而不是 C11。
C 编程:现代方法(第 2 版) - KN King(2008 年)。 一本学习C的好书。
C 语言编程(第 4 版) - Stephen Kochan(2014 年)。 一个很好的一般介绍和教程。
C Primer Plus (5th Edition) - Stephen Prata (2004)
一本关于 C 的书- Al Kelley/Ira Pohl (1998)。
C 书(免费在线)- Mike Banahan、Declan Brady 和 Mark Doran (1991)。
C:如何编程(第 8 版) - Paul Deitel 和 Harvey M. Deitel(2015 年)。 许多适合初学者的好技巧和最佳实践。 该索引非常好,可以作为一个不错的参考(只是不够全面,而且非常浅)。
Head First C - David Griffiths 和 Dawn Griffiths (2012)。
起点 C(第 5 版) -艾弗·霍顿(Ivor Horton)(2013 年)。 非常好的指针解释,使用了许多小而完整的程序。
Sams Teach Yourself C in 21 Days - Bradley L. Jones 和 Peter Aitken (2002)。 很好的入门资料。
C 简单步骤(第 5 版) - Mike McGrath(2018 年)。 这是一本学习和引用C的好书。
Effective C - Robert C Seacord (2020)。 对现代 C 的很好的介绍,包括关于动态内存分配、程序结构以及调试、测试和分析的章节。 它有一些指向可能的 C2x 功能的指针。
现代 C - Jens Gustedt(2017 年第 1 版;2020 年第 2 版)。 涵盖了从初级到高级C的5个级别(相遇、相识、认知、经验、志向)的C。它涵盖了C11和C17,包括线程和原子访问,其他书籍很少这样做。 并非所有编译器都能在所有环境中识别这些功能。
C 接口和实现- David R. Hanson (1997)。 提供有关如何以通用和可重用的方式在 C 中定义接口和实现之间的边界的信息。 它还通过将其应用于 C 中常见机制和数据结构的实现来演示此原则,例如列表、集合、异常、字符串操作、内存分配器等。 基本上,Hanson 将他编写的所有代码作为构建Icon和lcc 的一部分,并以其他人可以在他们自己的项目中重用的形式提取出最好的部分。 它是使用现代设计技术(包括 Liskov 的数据抽象)的良好 C 编程模型,展示了如何将大型 C 项目组织为一堆有用的库。
C 拼图书- Alan R. Feuer (1998)
标准 C 库- PJ Plauger (1992)。 它包含 C89 标准库实现的完整源代码,以及有关设计和代码设计原因的广泛讨论。
21 世纪 C:来自新学校的 C 技巧- Ben Klemens (2012)。 除了 C 语言,本书还解释了 gdb、valgrind、autotools 和 git。 关于风格的评论见最后一部分(第 6 章及以后)。
C 中的算法- Robert Sedgewick (1997)。 让您真正掌握用 C 语言实现算法。非常清晰明了; 可能会让您想扔掉所有其他算法书籍并保留这本。
C 语言中的问题解决和程序设计(第 6 版) - Jeri R. Hanly 和 Elliot B. Koffman (2009)。
数据结构 - 使用 C 的高级方法- Jeffrey Esakov 和 Tom Weiss (1989)。
C Unleashed - 理查德·希思菲尔德、劳伦斯·柯比等人。 (2000)。 不理想,但值得中级程序员练习本书中编写的问题。 这是 comp.lang.c 贡献者建议的一种类似食谱的好方法。
Expert C Programming: Deep C Secrets - Peter van der Linden (1994)。 Sun 编译器团队提供了许多有趣的信息和战争故事,但有些地方有些过时。
高级 C 编程示例- John W. Perry (1998)。
UNIX 环境中的高级编程- Richard W. Stevens 和 Stephen A. Rago (2013)。 关于如何从 C 代码使用 Unix API 的全面描述,但没有太多关于 C 编码的机制。
Essential C (免费 PDF) - Nick Parlante (2003)。 请注意,这在几个方面描述了 C90 语言(例如,在讨论//
注释和在代码中的任意位置放置变量声明时),因此应该谨慎对待。
C 编程常见问题解答:常见问题解答- Steve Summit (1995)。 这是前面列出的网站的书。 它不包括 C99 或更高版本的标准。
C in a Nutshell - Peter Prinz 和 Tony Crawford (2005)。 如果您需要 C99 的参考,那是一本好书。
功能 C - Pieter Hartel 和 Henk Muller (1997)。 教授对低级编程非常宝贵的现代实践,同时考虑并发性和模块化。
编程实践- Brian W. Kernighan 和 Rob Pike (1999)。 一本很好的书来陪伴 K&R。 它也使用 C++ 和 Java。
C 陷阱和陷阱,A. Koenig (1989)。 非常好,但 C 风格早于标准 C,这使得它现在不太值得推荐。
有些人主张将“陷阱和陷阱”从这份清单中删除,因为它使一些人陷入了犯错的境地; 其他人继续争论将其列入。 也许它应该被视为一本“专家”书,因为它需要对 C 有一定的了解才能理解自出版以来发生了什么变化。
MISRA-C - 由汽车行业软件可靠性协会发布和维护的行业标准。 涵盖 C89 和 C99。
虽然这不是一本这样的书,但许多程序员建议尽可能多地阅读和实现它。 MISRA-C 最初旨在作为安全关键应用程序的指南,但它适用于需要稳定、无错误的 C 代码的任何应用程序领域(谁不想要更少的错误?)。 MISRA-C 正在成为整个嵌入式行业的事实上的标准,甚至在其他编程分支中也越来越受欢迎。 该标准有(至少)三个出版物(1998 年、2004 年和 2012 年的当前版本)。 还有一份 2016 年的 MISRA 合规指南文件和 MISRA C:2012 修正案 1 — MISRA C:2012 的附加安全指南(于 2016 年 4 月发布)。
请注意,MISRA 规则中的某些限制不适用于所有上下文。 例如,指令 4.12 规定“不应使用动态内存分配”。 这适用于设计了 MISRA 规则的嵌入式系统; 它并不适用于任何地方。 (例如,编译器通常对符号表之类的东西使用动态内存分配,如果不进行动态内存分配,即使不是荒谬的,也会很困难。)
2007 年的初学者 C (116 本书)和 2008 年的高级 C (76 本书)的 ACCU 评论书籍的存档列表。其中大多数看起来不再出现在主站点上,您无法按主题浏览反正。
ISO 9899 Wiki 上有一系列书籍和教程需要谨慎,它本身并没有正式与 ISO 或 C 标准相关联,但包含有关 C 标准的信息(尽管它欢呼 ISO 9899:2011 和没有提到 ISO 9899:2018 的发布)。
警惕赫伯特·希尔特( Herbert Schildt)写的书。 特别是,您应该远离C:The Complete Reference (第 4 版,2000 年),在某些圈子中称为 C:The Complete Nonsense。
也不要使用 Yashwant Kanetkar 的《 Let Us C》 (第16 版,2017 年)一书。 许多人认为它是一本过时的教 Turbo C 的书,并且有很多过时的、误导性的和不正确的材料。 例如,第 137 页讨论了printf("%d %d %d\\n", a, ++a, a++)
的预期输出,但并未将其归类为未定义行为。 它还一贯促进不可移植和有缺陷的编码实践,例如在scanf
使用gets
、 %[\\n]s
,将getchar
返回值存储在char
类型的变量中或在stdin
上使用fflush
。
学习 C The Hard Way (2015) by Zed Shaw。 一本评论褒贬不一的书。 Tim Hentenaar对本书的评论:
总结下面列出的我的观点,作者以过于简单化和误导性的方式呈现材料,整个语料库是一团糟,他提供的一些观点和分析完全错误。 我试图通过新手的眼光来看待这本书,但不幸的是,我对用 C 编写代码的多年经验有偏见。对我来说很明显,要么作者对 C 的理解有缺陷,要么他故意过度简化指出他实际上误导读者的地方(有意或无意)。
“Learn C The Hard Way” 不是我可以推荐给正在学习编程和学习 C 的人的书。如果您已经是其他相关语言的称职程序员,那么它代表了一个有趣且不寻常的说明C,尽管我对本书的某些部分有所保留。 乔纳森·莱夫勒
其他贡献者,不一定记入修订历史,包括:
亚历克斯·洛克伍德,本·杰克逊,泡沫,爪子, coledot ,达纳·罗宾逊,丹尼尔·霍顿, desbest , Dervin咚, DWC , Erci后,盖伦, haziz ,约翰Bezem ,乔纳森·莱弗勒,约书亚Partogi ,卢卡斯,伦丁,马特K. , mossplix , Matthieu M. , midor , Nietzche-jou , Norman Ramsey , r3st0r3 , ridthyself , Robert S. Barnes , Steve Summit , Tim Ring , Tony Bai , VMAtm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.