[英]The Definitive C Book Guide and List

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


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)

请建议编辑接受的答案,以添加高质量的书籍,具有近似的技能水平和每本书的简短描述/描述。 (请注意,问题已被锁定,因此不会接受新的答案。列表中会保留一个答案)

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社区认为令人满意的书籍将列在名单上;其余的将定期删除。

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.

对于由C和C ++用户协会(ACCU)进行评论的书籍,应该与书籍一起添加指向这些评论的链接。

See also:

This question was discussed on Meta as part of the Deleted Questions Audit 2018.
The consensus was to keep it undeleted and actively maintained.


1 个解决方案


Reference (All Levels)

  • The C Programming Language (2nd Edition) - Brian W. Kernighan and Dennis M. Ritchie (1988). Still a good, short but complete introduction to C, 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编程语言(第2版) - Brian W. Kernighan和Dennis M. Ritchie(1988)。 C的发明者写的C仍然是一个很好的,简短但完整的介绍。但是,语言已经发生了变化,并且在过去的25年中已经发展出了很好的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:参考手册(第5版) - Samuel P. Harbison和Guy R. Steele(2002年)。关于C的优秀参考书,包括C99。它不是教程,可能不适合初学者。如果您需要为C编写编译器,那就太好了,因为作者在创建时必须这样做。

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

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

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

    comp.lang.c常见问题 - 史蒂夫峰会。关于C的许多问题的答案的网站

  • Various versions of the C language standards can be found here.


  • 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.

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

  • Rationale for C99 Standard.



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

    C语言编程(第4版) - Stephen Kochan(2014)。一个很好的一般介绍和教程。

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

    C Primer Plus(第5版) - Stephen Prata(2004)

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

    C编程:现代方法(第2版) - K. N. King(2008)。学习C的好书。

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

    一本关于C的书 - Al Kelley / Ira Pohl(1998)。

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

    The C Book(免费在线) - Mike Banahan,Declan Brady和Mark Doran(1991)。

  • 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:如何编程(第8版) - Paul Deitel和Harvey M. Deitel(2015)。为初学者提供了许多好的技巧和最佳实践。该指数非常好,并作为一个不错的参考(只是不完全全面,非常浅)。

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

    Head First C - David Griffiths和Dawn Griffiths(2012)。

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

    从C开始(第5版) - Ivor Horton(2013)。使用大量小而完整的程序对指针进行非常好的解释。

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

    萨姆斯在21天里自学C - Bradley L. Jones和Peter Aitken(2002)。非常好的介绍性的东西。

  • Applications Programming in ANSI C - Richard Johnsonbaugh and Martin Kalin (1996).

    ANSI C中的应用程序编程 - Richard Johnsonbaugh和Martin Kalin(1996)。


  • Object-oriented Programming with ANSI-C (Free PDF) - Axel-Tobias Schreiner (1993).The code gets a bit convoluted. If you want C++, use C++.

    使用ANSI-C进行面向对象编程(免费PDF) - Axel-Tobias Schreiner(1993)。代码有点复杂。如果您想要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接口和实现 - David R. Hanson(1997)。提供有关如何以通用和可重用的方式在C中定义接口和实现之间的边界的信息。它还通过将其应用于C中的公共机制和数据结构的实现来演示这一原理,例如列表,集合,异常,字符串操作,内存分配器等。基本上,Hanson将他编写的所有代码作为构建Icon和lcc的一部分,并以其他人可以为自己的项目重用的形式提取出最佳位。它是使用现代设计技术(包括Liskov的数据抽象)的良好C编程模型,展示了如何将大型C项目组织为一堆有用的库。

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

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

  • 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 discussion about the design and why the code is designed as shown.

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

  • 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).

    21世纪C:来自新学校的C技巧 - Ben Klemens(2012)。除了C语言之外,本书还介绍了gdb,valgrind,autotools和git。关于风格的评论可以在最后一部分(第6章及以后)中找到。

  • 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.

    C语言中的算法 - Robert Sedgewick(1997)。让您真正掌握在C中实现算法的方法。非常清晰明确;可能会让你想丢掉所有其他的算法书并保留这本书。

  • Pointers on C - Kenneth Reek (1997).

    C指针 - Kenneth Reek(1997)。

  • Pointers in C - Naveen Toppo and Hrishikesh Dewan (2013).

    C中的指针 - Naveen Toppo和Hrishikesh Dewan(2013年)。

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

    C语言中的问题解决和程序设计(第6版) - Jeri R. Hanly和Elliot B. Koffman(2009)。

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

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

  • 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.

    C Unleashed - Richard Heathfield,Lawrence Kirby,et al。 (2000年)。不理想,但值得中级程序员练习本书中写的问题。这是comp.lang.c贡献者建议的类似烹饪书的方法。

  • Modern C — Jens Gustedt (2017). Covers C in 5 levels (encounter, acquaintance, cognition, experience, ambition) from beginning C to advanced C. It covers C11 threads and atomic access, which few other books do and not all compilers recognize in all environments.
  • 现代C - Jens Gustedt(2017)。从C级到高级级C涵盖C级5级(遭遇,熟人,认知,经验,抱负)。它涵盖C11线程和原子访问,很少有其他书籍可以做,并非所有编译器都能在所有环境中识别。


  • 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编程:Deep C Secrets - Peter van der Linden(1994)。来自Sun编译团队的很多有趣的信息和战争故事,但有点过时了。

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

    高级C编程示例 - John W. Perry(1998)。

  • 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.

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

  • Advanced C: Food for the Educated Palate - Narain Gehani (1985). Great on pointers, pointers to functions, and a variety of advanced topics, such as how stuff is stored in memory, dynamic memory, stack usage, function calling, parameter passing, etc. Assumes you have a good grasp of C to start with. Warning: pre-dates the ANSI standard and a lot of modern programming design.

    高级C:受过教育的口味的食物 - Narain Gehani(1985)。精彩的指针,指向函数的指针,以及各种高级主题,例如内存中存储的内容,动态内存,堆栈使用,函数调用,参数传递等。假设您已经很好地掌握了C语言。警告:早于ANSI标准和许多现代编程设计。

  • Computer Programming: An Introduction for the Scientifically Inclined - Sander Stoks (2008). Great book about scientific use of programming languages.

    计算机程序设计:科学倾斜的介绍 - Sander Stoks(2008)。关于科学使用编程语言的好书。

  • Reversing: Secrets of Reverse Engineering - Eldad Eilam (2005). For those who want to test the limits of their ethics.

    逆转:逆向工程的秘密 - Eldad Eilam(2005)。对于那些想要测试他们的道德极限的人。


  • 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.

    Essential C(免费PDF) - Nick Parlante(2003)。请注意,这在几个点上描述了C90语言(例如,在讨论//在代码中的任意点处的变量声明的注释和放置时),因此应该谨慎对待它。

  • C Programming FAQs: Frequently Asked Questions - Steve Summit (1995).

    C编程常见问题解答:常见问题 - Steve Summit(1995)。

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

    C in a Nutshell - Peter Prinz和Tony Crawford(2005)。如果您需要C99的参考书,那就是优秀的书。

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

    功能C - Pieter Hartel和Henk Muller(1997)。教授对低级编程非常有用的现代实践,并考虑到并发性和模块性。

  • The Practice of Programming - Brian W. Kernighan and Rob Pike (1999). A very good book to accompany K&R.

    编程实践--Brian W. Kernighan和Rob Pike(1999)。陪伴K&R的一本非常好的书。

  • 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.

    A. Koenig的C陷阱和陷阱(1989)。非常好,但C风格的标准C之前的日期,这使得它现在不太值得推荐。

    Some have argued for the removal of 'Traps and Pitfalls' from this list because it has trapped some people into making mistakes; others continue to argue for its inclusion. Perhaps it should be regarded as an 'expert' book because it requires a moderately extensive knowledge of C to understand what's changed since it was published.


  • Computer Systems: A Programmer's Perspective (3rd Edition) - Randal E. Bryant and David R. O'Hallaron (2015). Explains the C language in a disjointed narrative style, like Pulp Fiction.

    计算机系统:程序员的观点(第3版) - Randal E. Bryant和David R. O'Hallaron(2015)。用脱俗的叙事风格解释C语言,如Pulp Fiction。

  • Abstraction and Specification in Program Development - Barbara Liskov and John V. Guttag (1986) (not the newer Java-based version by Liskov alone). This is an undergraduate text, with some ideas worth thinking about.

    程序开发中的抽象和规范 - Barbara Liskov和John V. Guttag(1986)(不仅仅是Liskov的基于Java的新版本)。这是一个本科课文,有一些值得思考的想法。

  • Composite/Structured Design - Glenford J. Myers (1978). This and other books from the late 1970s and early 1980s by Yourdon and Myers provide excellent insights on structured design.

    复合/结构设计 - Glenford J. Myers(1978)。由Yourdon和Myers撰写的20世纪70年代末和80年代初期的这本书和其他书籍为结构化设计提供了极好的见解。

  • Build Your Own Lisp — Daniel Holden (2014). An enjoyable way to learn C.

    建立自己的Lisp - Daniel Holden(2014)。一种愉快的学习方式C.

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

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

    Although this isn't a book as such, every experienced C programmer should read and implement as much of it as possible. MISRA-C was originally intended as guidelines for safety-critical applications in particular, but it applies to any area of application where stable, bug-free C code is desired (who doesn't want fewer bugs?). MISRA-C is becoming the de facto standard in the whole embedded industry and is getting increasingly popular even in other programming branches. There are (at least) three publications of the standard, one from 1998, one from 2004, and one from 2012, where the last is the currently active, relevant one. There is also a MISRA Compliance Guidelines document from 2016, and MISRA C:2012 Amendment 1 — Additional Security Guidelines for MISRA C:2012 (published in April 2016).
    Note that some of the strictures in the MISRA rules are not appropriate to every context. For example, directive 4.12 states "Dynamic memory allocation shall not be used". This may well be appropriate in the embedded systems for which the MISRA rules are designed; it is not appropriate everywhere. (Compilers, for instance, generally use dynamic memory allocation for things like symbol tables, and to do without dynamic memory allocation would be difficult, if not preposterous.)

    虽然这不是一本书,但每位经验丰富的C程序员都应尽可能多地阅读和实现它。 MISRA-C最初是作为安全关键应用程序的指南,但它适用于需要稳定,无错误的C代码的任何应用领域(谁不想要更少的错误?)。 MISRA-C正在成为整个嵌入式行业的事实标准,并且即使在其他编程分支中也越来越受欢迎。该标准有(至少)三种出版物,一种来自1998年,一种来自2004年,一种来自2012年,其中最后一种是目前活跃的相关出版物。 2016年还有MISRA合规指南文件和MISRA C:2012修订1 - MISRA C:2012附加安全指南(2016年4月发布)。请注意,MISRA规则中的某些限制并不适用于所有上下文。例如,指令4.12规定“不应使用动态内存分配”。这可能适用于设计MISRA规则的嵌入式系统;它无处不在。 (例如,编译器通常使用动态内存分配来处理符号表之类的事情,如果没有动态的内存分配则很难,如果不是荒谬的话。)

  • 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.



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.

警惕Herbert Schildt写的书。特别是,你应该远离C:The Complete Reference(4th Edition,2000),在某些圈子里称为C:The Complete Nonsense。

Also be wary of the book Let Us C (16th Edition, 2017) by Yashwant Kanetkar. Some people view it as a horribly outdated book that teaches Turbo C and has lot of obsolete, misleading and downright incorrect material.

同时要警惕Yashwant Kanetkar的书“Let Us C”(第16版,2017年)。有些人认为它是一本非常过时的书,教授Turbo C并且有许多过时的,误导性的和彻头彻尾的错误材料。

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

学习C The Hard Way(2015)作者:Zed Shaw。一本评论不一的书。蒂姆亨特纳尔对这本书的批评:

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.)


"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

“学习C艰难之路”并不是一本我可以推荐给那些学习编程和学习C的人的书。如果你已经是其他相关语言的称职程序员,那么它就代表了一个有趣且不同寻常的论述。 C,虽然我对本书的部分内容有所保留。乔纳森莱弗勒


Other contributors, not credited in the revision history:
Alex Lockwood, Ben Jackson, Bubbles, claws, coledot, Dana Robinson, Daniel Holden, 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, Tim Ring, Tony Bai, VMAtm

其他贡献者,在修订历史中没有记入:Alex Lockwood,Ben Jackson,Bubbles,claws,coledot,Dana Robinson,Daniel Holden,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,Tim Ring,Tony Bai,VMAtm




© 2014-2019 ITdaan.com 粤ICP备14056181号