警告!
这是不同质量的随机书籍列表。在某些人看来(有一定道理),它不再是推荐书籍的清单。列出的一些书籍包含明显不正确的陈述或教导错误/有害的做法。了解此类书籍的人可以编辑此答案以帮助改进它。
见The C book list has gone haywire. What to do with it?,也见Deleted question audit 2018。
参考(所有级别)
初学者
中级
-
Modern C — Jens Gustedt(2017 年第一版;2020 年第二版)。涵盖从初级 C 到高级 C 的 5 个级别(相遇、相识、认知、经验、抱负)的 C。它涵盖了 C11 和 C17,包括线程和原子访问,其他书籍很少这样做。并非所有编译器都能在所有环境中识别这些功能。
-
C Interfaces and Implementations - 大卫·R·汉森 (1997)。提供有关如何以通用和可重用的方式在 C 中定义接口和实现之间的边界的信息。它还通过将其应用于 C 中常见机制和数据结构的实现来演示这一原则,例如列表、集合、异常、字符串操作、内存分配器等。基本上,Hanson 将他编写的所有代码作为构建Icon 和lcc 的一部分,并以其他人可以在他们自己的项目中重用的形式提取出最好的部分。它是使用现代设计技术(包括 Liskov 的数据抽象)的优秀 C 编程模型,展示了如何将大型 C 项目组织为一堆有用的库。
-
The C Puzzle Book - Alan R. Feuer (1998)
-
The Standard C Library - P.J. 普劳格 (1992)。它包含 C89 标准库实现的完整源代码,以及关于设计的广泛讨论以及代码为何按所示设计的原因。
-
21st Century C: C Tips from the New School - 本·克莱门斯 (2012)。除了 C 语言,本书还解释了 gdb、valgrind、autotools 和 git。关于风格的 cmets 在最后一部分(第 6 章及以后)中找到。
-
Algorithms in C - 罗伯特·塞奇威克 (1997)。让您真正掌握用 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 年起在 Beginner's C(116 个书名)和自 2008 年起在Advanced 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(第 16th 版,2017 年)。许多人认为它是一本过时的书,教授 Turbo C,并且有许多过时、误导和不正确的材料。例如,第 137 页讨论了来自 printf("%d %d %d\n", a, ++a, a++) 的预期输出,并没有将其归类为 undefined behaviour。它还不断促进不可移植和错误的编码实践,例如在scanf 中使用gets、%[\n]s,将getchar 的返回值存储在char 类型的变量中或在stdin 上使用fflush。
Learn C The Hard Way (2015),作者:Zed Shaw。一本褒贬不一的书。
A critique of this book by Tim Hentenaar:
总结一下我在下面列出的观点,作者以一种过于简单化和误导性的方式呈现材料,整个语料库是一团糟,他提供的一些观点和分析完全是错误的。我试图以一个新手的眼光来看待这本书,但不幸的是,我对用 C 编写代码的多年经验有偏见。对我来说很明显,要么作者对 C 的理解存在缺陷,要么他故意将其过度简化为他实际上在误导读者(有意或无意)。
“Learn C The Hard Way”不是我可以向既学习编程又学习 C 的人推荐的一本书。如果您已经是其他相关语言的合格程序员,那么它代表了一种有趣且尽管我对本书的某些部分有所保留,但对 C 的不同寻常的阐述。 乔纳森·莱弗勒
过时
其他贡献者,不一定记入修订历史记录,包括:
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