提问人: 提问时间:2/19/2009 最后编辑:33 revs, 23 users 20%lillq 更新时间:9/11/2023 访问量:602385
权威的 C 书籍指南和清单
The Definitive C Book Guide and List
问:
本问题试图收集社区维护的关于c编程语言的高质量书籍列表,针对各种技能水平。
C 是一种复杂的编程语言,很难通过阅读在线教程随时随地掌握。一本综合性书籍通常是学习语言的最佳方式,找到一本好书是第一步。重要的是要避免写得不好的书,更重要的是,避免包含严重技术错误的书。
请对接受的答案提出编辑建议,以添加高质量的书籍,并附上大致的技能水平和关于每本书的简短简介/描述。(请注意,问题已锁定,因此不会接受任何新答案。该列表维护了一个答案)
随意讨论书籍的选择、质量、标题、摘要、技能水平以及您认为错误的任何其他内容。这里 C 社区认为满意的书籍将留在列表中;其余的将定期删除。
对于有 C 和 C++ 用户协会 (ACCU) 评论的图书,应随书一起添加指向这些评论的链接。
另请参阅:
- c 标签 wiki 中的其他 C 相关资源
- 类似的 c++ 列表:权威 C++ 书籍指南和列表
此问题在 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 和 C99。这不是一个教程,可能不适合初学者。如果你需要为 C 编写编译器,那就太好了,就像作者在开始时必须做的那样。
C 袖珍参考 (O'Reilly) - Peter Prinz 和 Ulla Kirch-Prinz (2002).
comp.lang.c 常见问题解答 - Steve Summit。网站提供了许多关于 C 语言的问题的答案。
新的 C 标准 - 带注释的参考文献 (免费 PDF) - Derek M. Jones (2009).所指的“新标准”是旧的C99标准,而不是C11。
初学者
C 编程:现代方法(第 2 版)- K. N. King (2008).一本学习 C 语言的好书。
C语言编程(第4版) - Stephen Kochan (2014).一个很好的一般介绍和教程。
C Primer Plus(第 5 版)- 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)。为初学者提供了很多好的技巧和最佳实践。该指数非常好,可以作为一个不错的参考(只是不完全全面,而且很浅)。
头优先C - David Griffiths和Dawn Griffiths(2012)。
开始 C(第 5 版)- Ivor Horton (2013).对指针的解释非常好,使用了很多小而完整的程序。
Sams 在 21 天内自学 C - Bradley L. Jones 和 Peter Aitken (2002).非常好的介绍性的东西。
- C 轻松步骤(第 5 版)-迈克·麦格拉思(2018 年)。这是一本学习和参考 C 语言的好书。
中间
现代 C — Jens Gustedt(2017 年第 1 版;2019 年第 2 版)。涵盖从初级 C 到高级 C 的 5 个级别(相遇、相识、认知、经验、抱负)。它涵盖了 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上的指针 - Kenneth Reek (1997).
C 语言中的问题解决和程序设计(第 6 版) - Jeri R. Hanly 和 Elliot B. Koffman (2009).
Data Structures - An Advanced Approach Using C - Jeffrey Esakov 和 Tom Weiss (1989).
C 释放 - 理查德·希思菲尔德、劳伦斯·柯比等人(2000 年)。虽然不理想,但值得中级程序员练习本书中写的问题。这是 comp.lang.c 贡献者建议的类似食谱的好方法。
- 使用 ANSI-C 进行面向对象编程 (免费 PDF) - Axel-Tobias Schreiner (1993). 代码变得有点复杂。如果需要 C++,请使用 C++。当然,它只使用 C90。
专家
Expert C Programming: Deep C Secrets - Peter van der Linden (1994).来自 Sun 编译器团队的许多有趣的信息和战争故事,但在某些地方有点过时。
Advanced C Programming by Example - 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 或更高版本的标准。
简而言之 - 彼得·普林茨和托尼·克劳福德 (2005).如果您需要 C99 的参考,这是一本好书。
C 简述(第 2 版)- Peter Prinz 和 Tony Crawford (2016),一本涵盖 C11 的参考书。
功能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:完整参考(第 4 版,2000 年),在某些圈子里被称为 C:完全废话。
也不要使用Yashavant Kanetkar的《Let Us C》(第16版,2017年)一书。许多人认为它是一本过时的书,教授 Turbo C,并且有很多过时的、误导性的和不正确的材料。例如,第 137 页讨论了预期的输出,但没有将其归类为应有的未定义行为。它还始终如一地促进不可移植和错误的编码实践,例如在 、 在类型的变量中使用 、 存储返回值或使用 on 。printf("%d %d %d\n", a, ++a, a++)
gets
%[\n]s
scanf
getchar
char
fflush
stdin
学习 C 艰难的方式 (2015) 作者:Zed Shaw。一本褒贬不一的书。蒂姆·亨特纳(Tim Hentenaar)对这本书的评论:
总结一下我的观点,作者以一种过于简单和误导的方式呈现材料,整个语料库是一团糟,他提供的一些观点和分析是完全错误的。我试图通过新手的眼光来看待这本书,但不幸的是,我被多年的 C 语言编写代码的经验所偏见。对我来说很明显,要么作者对 C 的理解有缺陷,要么他故意过度简化,以至于他实际上误导了读者(有意或无意)。
“艰难地学习 C”不是一本我可以推荐给既学习编程又学习 C 的人的书。如果你已经是其他相关语言的称职程序员,那么它代表了对 C 语言的一个有趣且不寻常的阐述,尽管我对本书的某些部分有所保留。乔纳森·莱夫勒
过时的
- 实用 C 编程(第 3 版) - Steve Oualline (1997)(初级)
其他贡献者,不一定在修订历史中注明,包括:
Alex Lockwood、Ben Jackson、Bubbles、claws、coledot、Dana Robinson、Daniel Holden、desbest、Dervin Thunk、dwc、Erci Hou、Garen、haziz、Johan Bezem、Jonathan Leffler、Joshua Partogi、 Lucas, Lundin, Matt K., mossplix, Matthieu M., midor, Nietzche-jou, Norman Ramsey, r3st0r3, ridthyself, Robert S. Barnes, smalinux, Steve Summit, Tim Ring, Tony Bai, VMAtm
评论
上一个:什么是严格的混叠规则?
评论