警告
这是质量各异的随机书籍的清单。在某些人看来(有理由),它不再是推荐书籍的列表。其中列出的一些书包含明显不正确的陈述或教导错误/有害的做法。了解此类书籍的人可以编辑此答案以帮助改进它。请参阅C书籍清单。怎么办呢?,还删除了问题审核2018。
参考(所有级别)
C编程语言(第二版) -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常见问题解答-Steve Summit。该网站提供有关C的许多问题的答案。
在这里可以找到C语言标准的各种版本。有C11标准草案的在线版本。
新的C标准-带注释的参考(免费PDF)-Derek M. Jones(2009)。所指的“新标准”是旧的C99标准,而不是C11。
C99标准的依据。
初学者
C编程:现代方法(第二版) -KN King(2008)。一本学习C的好书。
《用C编程》(第4版) -Stephen Kochan(2014)。一个很好的一般介绍和教程。
C Primer Plus(第5版) -Stephen Prata(2004)
关于C的书 -Al Kelley / Ira Pohl(1998)。
C书(免费在线)-Mike Banahan,Declan Brady和Mark Doran(1991)。
C:《如何编程》(第8版) -Paul Deitel和Harvey M. Deitel(2015)。为初学者提供了许多好的技巧和最佳实践。该指数非常好,可以作为一个不错的参考(只是不够全面,而且很浅)。
首席C-大卫·格里菲斯(David Griffiths)和黎明·格里菲斯(Dawn Griffiths)(2012)。
入门C(第5版) -Ivor Horton(2013)。指针的很好的解释,使用了许多小而完整的程序。
萨姆斯21天自学C-布拉德利·琼斯和彼得·艾特肯(2002)。很好的入门资料。
ANSI C中的应用程序编程 -Richard Johnsonbaugh和Martin Kalin(1996)。
中间
《现代C》 -詹斯·古斯特(Jens Gustedt)(2017年第一届爱丁堡; 2020年第二届爱丁堡)。从入门C到高级C,它涵盖5个级别的C(相遇,相识,认知,经验,野心)。涵盖C11和C17,包括线程和原子访问,这是其他书籍所没有的。并非所有的编译器都能在所有环境中识别这些功能。
C接口和实现 -David R. Hanson(1997)。提供有关如何以通用且可重用的方式在C中定义接口和实现之间的边界的信息。它还通过将其应用于C中的常见机制和数据结构(例如列表,集合,异常,字符串操作,内存分配器等)的实现来证明该原理。基本上,Hanson接受了他在构建Icon和lcc时编写的所有代码,并以其他人可以重用于自己的项目的形式提取了最好的代码。它是使用现代设计技术(包括Liskov的数据抽象)进行良好C编程的模型,展示了如何将一个大型C项目组织为一堆有用的库。
The C Puzzle Book-艾伦·弗尔(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释放 -理查德·希思菲尔德,劳伦斯·柯比等。(2000)。这并不理想,但是值得中级程序员练习本书中编写的问题。这是comp.lang.c贡献者建议的一种类似于菜谱的好方法。
- 使用ANSI-C进行面向对象的编程(免费PDF)-Axel-Tobias Schreiner(1993)。代码有点混乱。如果要使用C ++,请使用C ++。当然,它仅使用C90。
专家
专家C编程:深刻的C秘密 -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简而言之 -彼得·普林茨和托尼·克劳福德(2005)。如果您需要C99的参考书,那是一本很棒的书。
功能性C -Pieter Hartel和Henk Muller(1997)。在考虑并发性和模块化的情况下,讲授对低级编程无价的现代实践。
编程实践 -Brian W. Kernighan和Rob Pike(1999)。与K&R一起阅读的好书。它也使用C ++和Java。
建立自己的Lisp -Daniel Holden(2014)。一种学习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年开始学习ACCU审阅的关于初学者C(116种书名)和从2008 年开始高级C(76种书名)的图书的存档列表。这些书大多数看起来不再是主要网站,您不能按主题浏览无论如何。
警告事项
警惕希尔伯特•希尔德(Herbert Schildt)写的书。特别是,您应该远离C:完全参考(2000年第4版),在某些圈子中被称为C:完全废话。
也不要使用Yashwant Kanetkar 的《让我们吧》(2017 年第 16 版)。许多人将其视为一本过时的书,该书教授Turbo C,并且包含许多过时,误导和不正确的资料。例如,第137页讨论了预期的输出,printf("%d %d %d\n", a, ++a, a++)
并且并未将其分类为未定义的行为。
Zed Shaw的《Learn C The Hard Way》(2015年)。一本评论不一的书。
蒂姆·亨特纳尔(Tim Hentenaar)对这本书的评论:
总结一下我提出的观点,作者以一种过于简化和误导的方式介绍了该材料,整个语料是一团糟,他提供的某些观点和分析完全是错误的。我曾经尝试过从新手的角度看这本书,但不幸的是,我因多年使用C语言编写代码的经验而产生偏差。对于我来说,很明显作者要么对C的理解有误,要么他故意过分简化了C。指出他实际上在误导读者的地方(有意或以其他方式)。
“我很难向那些学习编程和学习C的人推荐这本书。”如果您已经是其他一些相关语言的熟练程序员,那么它代表了关于C,尽管我对本书的某些部分有所保留。 乔纳森·莱夫勒
过时的
其他捐助者,在修订历史不一定记,包括:
亚历克斯·洛克伍德,
本·杰克逊,
泡沫,
爪子,
coledot,
达纳·罗宾逊,
丹尼尔·霍顿,
Dervin咚,
DWC,
Erci后,
盖伦,
haziz,
约翰Bezem,
乔纳森·莱弗勒,
约书亚Partogi,
卢卡斯,
伦丁,
马特K.,
mossplix,
马修·米,
midor,
Nietzche-jou,
Norman Ramsey,
r3st0r3,
ridthyself,
Robert S.Barnes,
Steve Summit,
Tim Ring,
Tony Bai,
VMAtm