权威 C 书籍指南和列表 [英] The Definitive C Book Guide and List

查看:28
本文介绍了权威 C 书籍指南和列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题试图收集社区维护的 优质 图书列表,这些图书位于 编程语言,针对不同技能水平.

This question attempts to collect a community-maintained list of quality books on the c programming language, targeted at various skill levels.

C 是一种复杂的编程语言,很难通过阅读在线教程随时随地掌握.一本综合性的书往往是学习语言的最佳途径,而找到一本好书是第一步.避免写得不好的书很重要,更重要的是避免包含严重技术错误的书.

C is a complex programming language that is difficult to pick up on-the-go by reading online tutorials. A comprehensive book is often the best way to learn the language, and finding a good book is the first step. It is important to avoid badly-written books, and even more importantly, books that contain serious technical errors.

请建议对已接受的答案进行修改,以添加优质书籍,并附上大致的技能水平和关于每本书的简短介绍/描述.(请注意,问题已锁定,因此不会接受任何新答案.列表中只保留一个答案)

Please suggest edits to the accepted answer to add quality books, with an approximate skill level and a short blurb/description about each book. (Note that the question is locked, so no new answers will be accepted. A single answer is being maintained with the list)

随意辩论书籍选择、质量、标题、摘要、技能水平以及您认为错误的任何其他内容.此处 C 社区认为令人满意的书籍将留在列表中;其余的将被定期删除.

Feel free to debate book choices, quality, headings, summaries, skill levels, and anything else you see that is wrong. Books that are deemed satisfactory by the C community here will stick around on the list; the rest will be regularly removed.

对于有 C 和 C++ 用户协会 (ACCU) 评论的书籍,应随书一起添加这些评论的链接.

For books that have reviews by the Association of C and C++ Users (ACCU), a link to those reviews should be added along with the book.

另见:

  • Other C-related resources in the c tag wiki
  • A similar list for c++: The Definitive C++ Book Guide and List

这个问题在 Meta 上作为Deleted Questions Audit 2018.
共识是保持其不被删除并积极维护.

推荐答案

警告

这是一份不同质量的随机书籍清单.在某些人看来(有一定道理),不再是推荐书单.列出的一些书籍包含明显不正确的陈述或教导错误/有害的做法.知道此类书籍的人可以编辑此答案以帮助改进它.参见 C 书单有失控了.用它做什么?,还有已删除的问题审核 2018.

This is a list of random books of diverse quality. In the view of some people (with some justification), it is no longer a list of recommended books. Some of the listed books contain blatantly incorrect statements or teach wrong/harmful practices. People who are aware of such books can edit this answer to help improve it. See The C book list has gone haywire. What to do with it?, and also Deleted question audit 2018.

  • C 编程语言(第二版) - Brian W. Kernighan 和 Dennis M. Ritchie (1988).仍然是 C 的发明者写的很好的、简短但完整的 C 介绍(C90,而不是 C99 或更高版本).但是,在过去的 25 年中,语言发生了变化,并且形成了良好的 C 风格,并且有部分显示年代的书.

  • The C Programming Language (2nd Edition) - Brian W. Kernighan and Dennis M. Ritchie (1988). Still a good, short but complete introduction to C (C90, not C99 or later versions), written by the inventor of C. However, the language has changed and good C style has developed in the last 25 years, and there are parts of the book that show its age.

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

C: A Reference Manual (5th Edition) - Samuel P. Harbison and Guy R. Steele (2002). An excellent reference book on C, up to and including C99. It is not a tutorial, and probably unfit for beginners. It's great if you need to write a compiler for C, as the authors had to do when they started.

C 袖珍参考 (O'Reilly) - Peter Prinz 和 Ulla Kirch-Prinz (2002).

C Pocket Reference (O'Reilly) - Peter Prinz and Ulla Kirch-Prinz (2002).

comp.lang.c 常见问题解答 - Steve Summit.提供有关 C 的许多问题的答案的网站.

The comp.lang.c FAQ - Steve Summit. Web site with answers to many questions about C.

可以在此处找到各种版本的 C 语言标准.C11 标准草案有一个在线版本.

Various versions of the C language standards can be found here. There is an online version of the draft C11 standard.

新的 C 标准 - 带注释的参考(免费 PDF) - 德里克 M. 琼斯 (2009).新标准"指的是旧的 C99 标准,而不是 C11.

The new C standard - an annotated reference (Free PDF) - Derek M. Jones (2009). The "new standard" referred to is the old C99 standard rather than C11.

C99 标准的基本原理.

  • C Programming: A Modern Approach (2nd Edition) - K. N. King (2008). A good book for learning C.

C 语言编程(第 4 版) - 斯蒂芬·科昌 (Stephen Kochan) (2014).很好的一般介绍和教程.

Programming in C (4th Edition) - Stephen Kochan (2014). A good general introduction and tutorial.

C Primer Plus(第 5 版) - 斯蒂芬普拉塔 (2004)

C Primer Plus (5th Edition) - Stephen Prata (2004)

一本关于 C 的书 -艾尔·凯利/艾拉·波尔 (1998).

A Book on C - Al Kelley/Ira Pohl (1998).

C 书(免费在线)- Mike Banahan、Declan Brady、和马克·多兰 (1991).

The C Book (Free Online) - Mike Banahan, Declan Brady, and Mark Doran (1991).

C:如何编程(第 8 版) - Paul Deitel 和 HarveyM. 戴特尔 (2015).许多适合初学者的好技巧和最佳实践.该索引非常好,可以作为一个不错的参考(只是不够全面,而且非常浅).

C: How to Program (8th Edition) - Paul Deitel and Harvey M. Deitel (2015). Lots of good tips and best practices for beginners. The index is very good and serves as a decent reference (just not fully comprehensive, and very shallow).

先行 C - 大卫格里菲斯和黎明格里菲斯 (2012).

Head First C - David Griffiths and Dawn Griffiths (2012).

入门 C(第 5 版) - Ivor Horton(2013 年).非常好的指针解释,使用了很多小而完整的程序.

Beginning C (5th Edition) - Ivor Horton (2013). Very good explanation of pointers, using lots of small but complete programs.

Sams 在 21 天内自学 C - Bradley L. Jones 和 Peter Aitken (2002).非常好的介绍性内容.

Sams Teach Yourself C in 21 Days - Bradley L. Jones and Peter Aitken (2002). Very good introductory stuff.

  • C In Easy Steps (5th Edition) - Mike McGrath (2018). It is a good book for learning and referencing C.

有效 C - Robert C Seacord(2020 年).对现代 C 的很好的介绍,包括关于动态内存分配、程序结构以及调试、测试和分析的章节.它对可能的 C2x 功能有一些指示.

Effective C - Robert C Seacord (2020). A good introduction to modern C, including chapters on dynamic memory allocation, on program structure, and on debugging, testing and analysis. It has some pointers toward probable C2x features.

  • 现代 C — Jens Gustedt(2017 年第 1 版;2020 年第 2 版).涵盖了C从初级到高级C的5个层次(相遇、相识、认知、经验、志向).涵盖了C11和C17,包括线程和原子访问,其他书籍很少这样做.并非所有编译器都能在所有环境中识别这些功能.

  • Modern C — Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Covers C in 5 levels (encounter, acquaintance, cognition, experience, ambition) from beginning C to advanced C. It covers C11 and C17, including threads and atomic access, which few other books do. Not all compilers recognize these features in all environments.

C 接口和实现 - David R. Hanson (1997).提供有关如何以通用和可重用的方式在 C 中定义接口和实现之间的边界的信息.它还通过将其应用于 C 中常见机制和数据结构的实现来演示此原则,例如列表、集合、异常、字符串操作、内存分配器等.基本上,Hanson 将他编写的所有代码作为构建 Iconlcc 并以其他人可以在他们自己的项目中重用的形式提取出最好的部分.这是使用现代设计技术(包括 Liskov 的数据抽象)的良好 C 编程模型,展示了如何将大型 C 项目组织为一堆有用的库.

C Interfaces and Implementations - David R. Hanson (1997). Provides information on how to define a boundary between an interface and implementation in C in a generic and reusable fashion. It also demonstrates this principle by applying it to the implementation of common mechanisms and data structures in C, such as lists, sets, exceptions, string manipulation, memory allocators, and more. Basically, Hanson took all the code he'd written as part of building Icon and lcc and pulled out the best bits in a form that other people could reuse for their own projects. It's a model of good C programming using modern design techniques (including Liskov's data abstraction), showing how to organize a big C project as a bunch of useful libraries.

C 拼图书 -Alan R. Feuer (1998)

The C Puzzle Book - Alan R. Feuer (1998)

标准 C 库 -PJ Plauger (1992).它包含 C89 标准库实现的完整源代码,以及有关设计和代码设计原因的广泛讨论.

The Standard C Library - P.J. Plauger (1992). It contains the complete source code to an implementation of the C89 standard library, along with extensive discussions about the design and why the code is designed as shown.

21 世纪 C:来自新的 C 技巧学校 - 本·克莱门斯 (Ben Klemens) (2012).除了 C 语言,本书还解释了 gdb、valgrind、autotools 和 git.关于风格的评论见最后一部分(第 6 章及以后).

21st Century C: C Tips from the New School - Ben Klemens (2012). In addition to the C language, the book explains gdb, valgrind, autotools, and git. The comments on style are found in the last part (Chapter 6 and beyond).

C 中的算法 - 罗伯特塞奇威克 (1997).让你真正掌握用 C 语言实现算法.非常清晰明了;可能会让你想扔掉所有其他算法书籍并保留这本.

Algorithms in C - Robert Sedgewick (1997). Gives you a real grasp of implementing algorithms in C. Very lucid and clear; will probably make you want to throw away all of your other algorithms books and keep this one.

  • Pointers on C - Kenneth Reek (1997).
  • Problem Solving and Program Design in C (6th Edition) - Jeri R. Hanly and Elliot B. Koffman (2009).

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

Data Structures - An Advanced Approach Using C - Jeffrey Esakov and Tom Weiss (1989).

C 释放 - 理查德·希思菲尔德,劳伦斯柯比等.(2000).不理想,但值得中级程序员练习本书中编写的问题.这是 comp.lang.c 贡献者建议的一种类似食谱的好方法.

C Unleashed - Richard Heathfield, Lawrence Kirby, et al. (2000). Not ideal, but it is worth intermediate programmers practicing problems written in this book. This is a good cookbook-like approach suggested by comp.lang.c contributors.

  • Object-oriented Programming with ANSI-C (Free PDF) - Axel-Tobias Schreiner (1993). The code gets a bit convoluted. If you want C++, use C++. It only uses C90, of course.
  • 专家 C 编程:深层 C 秘密 - 彼得范德林登 (1994).Sun 编译器团队提供了许多有趣的信息和战争故事,但有些地方有些过时.

  • Expert C Programming: Deep C Secrets - Peter van der Linden (1994). Lots of interesting information and war stories from the Sun compiler team, but a little dated in places.

高级 C 编程示例- 约翰·W·佩里 (1998).

Advanced C Programming by Example - John W. Perry (1998).

UNIX 环境中的高级编程 - Richard W. Stevens 和 Stephen A. Rago (2013).关于如何从 C 代码中使用 Unix API 的全面描述,但不太了解 C 编码的机制.

Advanced Programming in the UNIX Environment - Richard W. Stevens and Stephen A. Rago (2013). Comprehensive description of how to use the Unix APIs from C code, but not so much about the mechanics of C coding.

  • Essential C(免费 PDF)- Nick Parlante (2003).请注意,这在几个方面描述了 C90 语言(例如,在讨论 // 注释和在代码中的任意位置放置变量声明时),因此应该将其视为谨慎一些.

  • Essential C (Free PDF) - Nick Parlante (2003). Note that this describes the C90 language at several points (e.g., in discussing // comments and placement of variable declarations at arbitrary points in the code), so it should be treated with some caution.

C 编程常见问题:常见问题 - 史蒂夫峰会 (1995).这是前面列出的网站的书.它不包括 C99 或更高版本的标准.

C Programming FAQs: Frequently Asked Questions - Steve Summit (1995). This is the book of the web site listed earlier. It doesn't cover C99 or the later standards.

C 简述 -彼得·普林茨和托尼·克劳福德 (2005).如果您需要 C99 的参考资料,这是一本好书.

C in a Nutshell - Peter Prinz and Tony Crawford (2005). Excellent book if you need a reference for C99.

Functional C - Pieter Hartel和亨克穆勒 (1997).教授对低级编程非常宝贵的现代实践,同时考虑并发性和模块化.

Functional C - Pieter Hartel and Henk Muller (1997). Teaches modern practices that are invaluable for low-level programming, with concurrency and modularity in mind.

编程实践 -Brian W. Kernighan 和 Rob Pike (1999).一本非常适合 K&R 的好书.它也使用 C++ 和 Java.

The Practice of Programming - Brian W. Kernighan and Rob Pike (1999). A very good book to accompany K&R. It uses C++ and Java too.

  • C 陷阱和陷阱 作者:A. Koenig (1989).非常好,但 C 风格早于标准 C,这使得它现在不太值得推荐.

  • C Traps and Pitfalls by A. Koenig (1989). Very good, but the C style pre-dates standard C, which makes it less recommendable these days.

有些人主张从这个列表中删除陷阱和陷阱",因为它让一些人犯了错误;其他人继续争论将其列入.也许它应该被视为一本专家"书,因为它需要对 C 有一定的了解才能理解自出版以来发生了什么变化.

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

  • MISRA-C - industry standard published and maintained by the Motor Industry Software Reliability Association. Covers C89 and C99.

虽然这不是一本书,但许多程序员建议尽可能多地阅读和实现它.MISRA-C 最初旨在作为安全关键应用程序的指南,但它适用于任何需要稳定、无错误的 C 代码的应用程序领域(谁不想要更少的错误?).MISRA-C 正在成为整个嵌入式行业事实上的标准,甚至在其他编程分支中也越来越受欢迎.该标准有(至少)三个出版物(1998 年、2004 年和 2012 年的当前版本).还有一份 2016 年的 MISRA 合规指南文件,以及 MISRA C:2012 修正案 1 — MISRA C:2012 的附加安全指南(2016 年 4 月发布).

请注意,MISRA 规则中的某些限制不适用于所有上下文.例如,指令 4.12 规定不应使用动态内存分配".这适用于设计了 MISRA 规则的嵌入式系统;它并不适用于任何地方.(例如,编译器通常为符号表之类的东西使用动态内存分配,如果不使用动态内存分配,那将是很困难的,如果不是很荒谬的话.)

Beginner's C(116 个标题)来自 2007 年和 Advanced C(76 本书)从 2008 年开始.其中大部分看起来不是主要的网站了,无论如何你都不能按主题浏览.

Archived lists of ACCU-reviewed books on Beginner's C (116 titles) from 2007 and Advanced C (76 titles) from 2008. Most of these don't look to be on the main site anymore, and you can't browse that by subject anyway.

ISO 9899 Wiki,它本身并没有正式与 ISO 或 C 标准相关联,但包含有关 C 标准的信息(尽管它欢呼 ISO 9899:2011 的发布并且没有提到 ISO 9899:2018 的发布).

There is a list of books and tutorials to be cautious about at the ISO 9899 Wiki, which is not itself formally associated with ISO or the C standard, but contains information about the C standard (though it hails the release of ISO 9899:2011 and does not mention the release of ISO 9899:2018).

警惕 Herbert Schildt 所著的书籍.特别是,您应该远离 C:完整参考(第 4 版,2000 年),在某些圈子中称为 C: The Complete Nonsense.

Be wary of books written by Herbert Schildt. In particular, you should stay away from C: The Complete Reference (4th Edition, 2000), known in some circles as C: The Complete Nonsense.

也不要使用这本书 Let Us C (16th 版,2017 年),作者是 Yashwant Kanetkar.许多人认为它是一本过时的教 Turbo C 的书,并且有很多过时的、误导性的和不正确的材料.例如,第 137 页讨论了 printf("%d %d %d ", a, ++a, a++) 的预期输出,但并未将其归类为 未定义的行为 应该的.它还一贯提倡不可移植和有缺陷的编码实践,例如在 scanf 中使用 gets%[ ]s,存储 gets 的返回值code>getchar 在 char 类型的变量中或在 stdin 上使用 fflush.

Also do not use the book Let Us C (16th Edition, 2017) by Yashwant Kanetkar. Many people view it as an outdated book that teaches Turbo C and has lots of obsolete, misleading and incorrect material. For example, page 137 discusses the expected output from printf("%d %d %d ", a, ++a, a++) and does not categorize it as undefined behaviour as it should. It also consistently promotes unportable and buggy coding practices, such as using gets, %[ ]s in scanf, storing return value of getchar in a variable of type char or using fflush on stdin.

Learn C The Hard Way(2015 年),作者 Zed Shaw.一本评论褒贬不一的书.对本书的评论 Tim Hentenaar:

Learn C The Hard Way (2015) by Zed Shaw. A book with mixed reviews. A critique of this book by Tim Hentenaar:

总结我的观点,下面列出,作者以一种过于简单化和误导性的方式呈现材料,整个语料库是一团糟,他提供的一些观点和分析完全是错误的.我试图通过新手的眼光来看待这本书,但不幸的是,我对用 C 编写代码的多年经验有偏见.对我来说很明显,要么作者对 C 的理解有缺陷,要么他故意过度简化到指出他实际上误导了读者(有意或无意).

To summarize my views, which are laid out below, the author presents the material in a greatly oversimplified and misleading way, the whole corpus is a bundled mess, and some of the opinions and analyses he offers are just plain wrong. I've tried to view this book through the eyes of a novice, but unfortunately I am biased by years of experience writing code in C. It's obvious to me that either the author has a flawed understanding of C, or he's deliberately oversimplifying to the point where he's actually misleading the reader (intentionally or otherwise).

以艰难的方式学习 C"不是我可以推荐给正在学习编程和学习 C 的人的书.如果你已经是其他相关语言的称职程序员,那么它代表了对 C 的有趣和不寻常的阐述,尽管我对书的部分.乔纳森·莱夫勒

"Learn C The Hard Way" is not a book that I could recommend to someone who is both learning to program and learning C. If you're already a competent programmer in some other related language, then it represents an interesting and unusual exposition on C, though I have reservations about parts of the book. Jonathan Leffler

  • Practical C Programming (3rd Edition) - Steve Oualline (1997)(Beginner)

其他贡献者,不一定记入修订历史,包括:
亚历克斯·洛克伍德本·杰克逊气泡爪子coledot,达娜·罗宾逊丹尼尔霍尔顿desbestDervin ThunkdwcErci侯盖伦haziz约翰·贝泽姆乔纳森·莱夫勒Joshua Partogi卢卡斯伦丁马特 K.mossplixMatthieu M.,midor,Nietzche-jou诺曼·拉姆齐r3st0r3ridthyself罗伯特·巴恩斯smalinux,史蒂夫峰会蒂姆环托尼白VMAtm

Other contributors, not necessarily credited in the revision history, include:
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

这篇关于权威 C 书籍指南和列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆