You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.8 KiB

春节策划二 | 关于 C 语言,我有这些书籍想推荐给你

你好,我是于航。在上一篇加餐里我提到,为了产生学习的“飞轮效应”,我们可以先熟读经典书籍,来完成对某个领域知识的“原始资本积累”。那么,对于 C 语言学习来说,从基础到进阶,都有哪些经典书籍可以参考呢?

今天,我就向你介绍几本值得作为首批阅读材料的 C 语言书籍。这些书里的大部分我都读过不止一遍,希望它们也能对你有所帮助。

第一本书是 Stephen Prata 的经典著作《C Primer Plus》。

图片

你可能也对它很熟悉。这本书非常适合没有任何编程语言基础的同学,来作为初次学习 C 语言时的参考书籍。当然,如果你已经具备了一定的 C 语言基础和项目经验,也可以阅读本书来进行适当的查缺补漏。

这本书详细地介绍了 C 基本语法(最新版,基于 C11 标准)的各类细节,并通过大量实例,展示了这些语法在实际项目中的使用方式。但稍显遗憾的是,本书对 C 标准库的相关内容仅在附录中做了简短介绍,如果你想了解如何正确使用标准库的相关接口,那它的参考价值就比较有限了。

第二本书是 Jens Gustedt 的《Modern C》

图片

这本书虽然没有上一本经典,但它是为数不多的以 C17 标准为主的 C 语言书籍。这本书采用了不同的角度将相关内容进行了分类并且还讲解了代码风格、C 内存模型、多线程以及原子操作等内容这些都是《C Primer Plus》中没有涉及到的。

唯一美中不足的是,书中的用例相对来说较为复杂,理解成本比较高。但还是推荐你完整阅读一遍,相信读完后你会有不少收获。

第三本书是 Randal E.Bryant 等人编写的《Computer Systems: A Programmers Perspective》它的中文版书名为《深入理解计算机系统》

图片

同样地,这也是一本经典书籍,通常被简称为 “CSAPP”。我认为这本书是每一个专业的程序员都应该反复阅读甚至去动手实践的一本书。通过它我们能够对计算机系统的内部运作机制有一个基本且全面的认识

对于 C 语言开发者来说,掌握基本的语法只是职业生涯中的第一步。如果想触及与 C 语言密切相关的操作系统、编译器、虚拟机、系统编程等众多底层领域,就离不开与计算机系统打交道。因此,这本书可以说是 C 开发者的必读书之一。

第四本书是 Igor Zhirkov 的《Low-Level Programming》

图片

这本书可以作为学习 NASM 和 x86-64 的入门教材。NASM 是一个针对 x86 处理器的汇编器,它可以将我们使用纯 x86 汇编代码编写的程序,编译为对应的二进制可执行文件。

本书使用汇编代码与 C 代码,介绍了 x86-64 平台上的系统调用、虚拟内存、非本地跳转、调用约定,以及共享库等内容,信息量非常丰富。不过这本书也有一些不足的地方,比如某些章节的内容可能有些偏题(如 12.2 节介绍的递归下降算法),并且课后习题较为复杂(比如有一节的课后题是使用汇编实现一个 Forth Machine

第五本书是潘爱民等人编写的《程序员的自我修养——链接、装载与库》。

图片

这本书可以作为 CSAPP 的后续拓展资料。该书详细地介绍了程序编译及运行时背后发生的一切细节比如目标文件的结构、静态链接与动态链接的区别、Linux 共享库的版本控制,以及 CRT 的组成结构与运行原理等。但稍有遗憾的是,本书的相关内容是基于 IA-32 而非 x86-64 平台介绍的,两者在某些技术细节上可能稍有不同。

第六本书是 Peter Van Der Linden 的《Expert C Programming: Deep C Secrets》

图片

这本书出版于 1994 年,因此其中的部分内容在如今的 C17 甚至 C2x 标准下,早已过时。但我仍然向你推荐它的一个重要原因是,这本书的作者以诙谐幽默的方式讲述了 C 语言在设计上的种种考量。如果你想知道为什么 C 语法会被如此设计,那么看完这本书,你可能会有新的发现。

最后一本书是邓志的《x86/x64 体系探索及编程》

图片

从名字上就能看出,这是一本专注于探索 x86/x64 平台处理器架构的书,因此它并非适合所有 C 开发者。如果你对 x86 ISA 指令的原理和使用细节感兴趣,又不想直接阅读英文版的 Intel x86 Manual那这本书无疑是一个很好的选择。

当然,除了上面推荐的这几本书外,在学习 C 语言的过程中,你也可以参考 cplusplus.comcppreference.com 等较为权威的网站,来查询与具体 C 语法或标准库特性使用相关的内容。

“书山有路勤为径,学海无涯苦作舟。”希望本讲的内容能给你一些帮助,让我们一起在终身学习的旅程中继续前进。