这个问题试图收集社区维护的关于c编程语言的优质书籍清单,目标是各种技能水平.
C是一种复杂的编程语言,通过阅读在线教程很难在旅途中学习.综合性书籍通常是学习语言的最佳方式,找到一本好书是第一步.重要的是要避免写得不好的书籍,更重要的是要避免包含严重技术错误的书籍.
请建议编辑接受的答案,以添加高质量的书籍,具有近似的技能水平和每本书的简短描述/描述.(请注意,问题已被锁定,因此不会接受新的答案.列表中会保留一个答案)
随意讨论书籍选择,质量,标题,摘要,技能水平以及您认为错误的任何其他内容.C社区认为令人满意的书籍将列在名单上; 其余的将定期删除.
对于由C和C++用户协会(ACCU)进行评论的书籍,应该与书籍一起添加指向这些评论的链接.
也可以看看:
c 标记wiki中的其他C相关资源
类似的c ++列表:The Definitive C++ Book Guide and List
这个问题在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袖珍参考(O'Reilly) - Peter Prinz和Ulla Kirch-Prinz(2002).
comp.lang.c常见问题 - 史蒂夫峰会.关于C的许多问题的答案的网站
可以在此处找到各种版本的C语言标准.有一个C11标准草案的在线版本.
新的C标准 - 注释参考(免费PDF) - Derek M. Jones(2009).提到的"新标准"是旧的C99标准而不是C11标准.
C99标准的基本原理.
C语言编程(第4版) - Stephen Kochan(2014).一个很好的一般介绍和教程.
C Primer Plus(第5版) - Stephen Prata(2004)
C编程:现代方法(第2版) - KN King(2008).学习C的好书.
C - Al Kelley/Ira Pohl(1998)上的一本书.
The C Book(免费在线) - Mike Banahan,Declan Brady和Mark Doran(1991).
C:如何编程(第8版) - Paul Deitel和Harvey M. Deitel(2015).为初学者提供了许多好的技巧和最佳实践.该指数非常好,并作为一个不错的参考(只是不完全全面,非常浅).
Head First C - David Griffiths和Dawn Griffiths(2012).
从C开始(第5版) - Ivor Horton(2013).使用大量小而完整的程序对指针进行非常好的解释.
萨姆斯在21天里自学C - Bradley L. Jones和Peter Aitken(2002).非常好的介绍性的东西.
ANSI C中的应用程序编程 - Richard Johnsonbaugh和Martin Kalin(1996).
中间
使用ANSI-C进行面向对象编程(免费PDF) - Axel-Tobias Schreiner(1993).代码有点复杂.如果您想要C++,请使用C++.
C接口和实现 - David R. Hanson(1997).提供有关如何以通用和可重用的方式在C中定义接口和实现之间的边界的信息.它还通过将其应用于C中的公共机制和数据结构的实现来演示这一原理,例如列表,集合,异常,字符串操作,内存分配器等.基本上,Hanson将他编写的所有代码作为构建Icon和lcc的一部分,并以其他人可以为自己的项目重用的形式提取出最佳位.它是使用现代设计技术(包括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中实现算法的方法.非常清晰明确; 可能会让你想丢掉所有其他的算法书并保留这本书.
C指针 - Kenneth Reek(1997).
C中的指针 - Naveen Toppo和Hrishikesh Dewan(2013年).
C语言中的问题解决和程序设计(第6版) - Jeri R. Hanly和Elliot B. Koffman(2009).
数据结构 - 使用C的高级方法 - Jeffrey Esakov和Tom Weiss(1989).
C Unleashed - Richard Heathfield,Lawrence Kirby,et al.(2000年).不理想,但值得中级程序员练习本书中写的问题.这是comp.lang.c贡献者建议的类似烹饪书的方法.
现代C - Jens Gustedt(2017).从C级到高级级C涵盖C级5级(遭遇,熟人,认知,经验,抱负).它涵盖C11线程和原子访问,很少有其他书籍可以做,并非所有编译器都能在所有环境中识别.
专家
专家C编程:Deep C Secrets - Peter van der Linden(1994).来自Sun编译团队的很多有趣的信息和战争故事,但有点过时了.
高级C编程示例 - John W. Perry(1998).
UNIX环境中的高级编程 - Richard W. Stevens和Stephen A. Rago(2013).关于如何使用C代码中的Unix API的全面描述,但不是关于C编码的机制.
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.
A. Koenig的C陷阱和陷阱(1989).非常好,但C风格的标准C之前的日期,这使得它现在不太值得推荐.
有些人主张从这个清单中删除"陷阱和陷阱",因为它困扰了一些人犯错误; 其他人继续争辩将其列入.也许它应该被视为一本"专家"书,因为它需要适度广泛的C知识才能理解自出版以来发生了哪些变化.
建立自己的Lisp - Daniel Holden(2014).一种愉快的学习方式C.
MISRA-C - 由汽车工业软件可靠性协会发布和维护的行业标准.涵盖C89和C99.
虽然这不是一本书,但每位经验丰富的C程序员都应尽可能多地阅读和实现它.MISRA-C最初是作为安全关键应用程序的指南,但它适用于需要稳定,无错误的C代码的任何应用领域(谁不想要更少的错误?).MISRA-C正在成为整个嵌入式行业的事实标准,并且即使在其他编程分支中也越来越受欢迎.该标准有(至少)三种出版物(1998年,2004年,以及2012年的当前版本).2016年还有MISRA合规指南文件和MISRA C:2012修订1 - MISRA C:2012附加安全指南(2016年4月发布).
请注意,MISRA规则中的某些限制并不适用于所有上下文.例如,指令4.12规定"不应使用动态内存分配".这适用于设计MISRA规则的嵌入式系统; 它无处不在.(例如,编译器通常使用动态内存分配来处理符号表之类的事情,如果没有动态的内存分配则很难,如果不是荒谬的话.)
累计列出了ACCU评论的书籍,其中包括2007 年的初级C(116种)和来自2008 年的高级C(76种).其中大部分都不会出现在主站点上,你无法按主题浏览无论如何.
警惕Herbert Schildt写的书.特别是,你应该远离C:The Complete Reference(4th Edition,2000),在某些圈子里称为C:The Complete Nonsense.
同时要警惕Yashwant Kanetkar 的书" Let Us C"(第 16 版,2017年).有些人认为它是一本非常过时的书,教授Turbo C并且有许多过时的,误导性的和彻头彻尾的错误材料.
学习C The Hard Way(2015)作者:Zed Shaw.一本评论不一的书. 蒂姆亨特纳尔对这本书的批评:
总结我的观点,如下所示,作者以极其简单和误导的方式呈现材料,整个语料库是捆绑的混乱,他提供的一些观点和分析是完全错误的.我试图通过一个新手的眼睛来看这本书,但不幸的是,我在C语言编写代码方面有多年的偏见.对我来说很明显,作者对C的理解有缺陷,或者他故意过度简化他实际上误导了读者(有意或无意地).
"学习C艰难之路"并不是一本我可以推荐给那些学习编程和学习C的人的书.如果你已经是其他相关语言的称职程序员,那么它就代表了一个有趣且不同寻常的论述. C,虽然我对本书的部分内容有所保留. 乔纳森莱弗勒
实用C编程(第3版) - Steve Oualline(1997)(初级)
其他贡献者,在修订历史中没有记入:
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