繁体   English   中英

权威的 C 书籍指南和列表

[英]The Definitive C Book Guide and List

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

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 语言标准的各种版本。 C11 标准草案有一个在线版本。

  • 新的 C 标准 - 带注释的参考(免费 PDF) - Derek M. Jones (2009)。 所指的“新标准”是旧的 C99 标准而不是 C11。

  • C99 标准的基本原理


初学者

  • 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 将他编写的所有代码作为构建Iconlcc 的一部分,并以其他人可以在他们自己的项目中重用的形式提取出最好的部分。 它是使用现代设计技术(包括 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 语言实现算法。非常清晰明了; 可能会让您想扔掉所有其他算法书籍并保留这本。

  • ANSI-C 面向对象编程(免费 PDF) - Axel-Tobias Schreiner (1993)。 代码有点复杂。 如果您想要 C++,请使用 C++。 当然,它只使用 C90。
  • Extreme C:突破 C 的极限,你就能做到- Kamran Amini (2019)。 本书以您现有的 C 知识为基础,可帮助您成为更专业的 C 程序员。 您将深入了解算法设计、功能和结构,并了解 POSIX 环境中的多线程和多处理。

专家


未分类

  • 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达纳·罗宾逊丹尼尔·霍顿desbestDervin咚DWCErci后盖伦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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM