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

查看:19
本文介绍了权威的 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 上作为 已删除的问题审计 2018.
共识是保持它不被删除并积极维护.

推荐答案

警告

这是不同质量的随机书籍列表.在某些人看来(有一定道理),它不再是推荐书籍的清单.列出的一些书籍包含明显不正确的陈述或教导错误/有害的做法.了解此类书籍的人可以编辑此答案以帮助改进它.请参阅 C 书籍列表失控了.如何处理它?<​​/a>,以及已删除问题审核 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 编程语言(第 2 版) - Brian W. Kernighan 和 Dennis M. Ritchie (1988).仍然是一个很好的、简短但完整的 C 介绍(C90,不是 C99 或更高版本),由 C 的发明者编写.但是,在过去的 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 版)-斯蒂芬·科坎(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).

Head First C - 大卫格里菲斯和黎明格里菲斯 (2012).

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

Beginning C (5th Edition) - 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.

Effective 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 个级别(相遇、相识、认知、经验、抱负)的 C.它涵盖了 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 普劳格 (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 中的算法 - Robert塞奇威克 (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 释放 - Richard Heathfield,劳伦斯柯比等人.(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.
  • 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.

函数式 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.科尼希 (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 规则的嵌入式系统;它并不适合任何地方.(例如,编译器通常对符号表之类的东西使用动态内存分配,如果不是荒谬的话,不使用动态内存分配是很困难的.)

初学者 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: The Complete Reference(第 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 (16thsup> 版,2017 年),作者:Yashwant Kanetkar.许多人认为它是一本过时的书,教授 Turbo C,并且有许多过时、误导和不正确的材料.例如,第 137 页讨论了 printf("%d %d %d ", a, ++a, a++) 的预期输出,并没有将其归类为 未定义的行为.它还一贯提倡不可移植和有缺陷的编码实践,例如在 scanf 中使用 gets%[ ]s,存储 getcharchar 类型的变量中或在 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.一本褒贬不一的书.对本书的评论 by 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,达娜·罗宾逊丹尼尔·霍尔登,desbest,Dervin Thunk,dwc,侯二慈,盖伦haziz,约翰·贝泽姆,乔纳森·莱夫勒约书亚·帕托吉卢卡斯伦丁马特 K.,mossplix,Matthieu M.,midor,尼采-jou,诺曼·拉姆齐r3st0r3,ridthyself,罗伯特·S·巴恩斯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天全站免登陆