这本经典的K&R C被称为C程序员的第一本书,也是海带C语言推荐系列书籍的第一本书,这本书适合入门级的菜鸟,也适合code多年的老鸟。
技术书籍不同于其他如小说类的书籍,越复杂越有深度越好看,无论是菜鸟还是老鸟,学一门新的语言都喜欢简单、直接的方式,最好是看看语法就能快速进入实际项目开发。
一本厚厚的大部头,让人厌烦不说,很容易使人失去兴趣甚至放弃,随后便被束之高阁,这样的书籍虽然内容丰富,却打击了无数少男少女积极上进的心哪。
幸运的是K&R C只有薄薄的200多页,即使这200页又被分成了8章,平均每章只有十几页,却全面、系统、准确地描述了C语言的特性和基本语法。
BWK和D爷爷唯恐大家不能理解,几乎对书中的每个示例都作了说明,同时又止步于过度且繁冗的解析,简单的风格让大家不至于分心于其他知识体系。
看,多符合D爷爷的KISS(keep it simple ,silly)原则!
另外,大多数的技术类书籍是有时限性的,长则五年、短则几个月某些技术书籍就会随着技术的更新被淘汰,但C语言是无可替代的,所以这本K&R C值得一读哦。
0x02 海带说K&R C只关心C语言本身的东西,其他如进程间通信、多线程处理等相对深入的知识,都不在本书范围之内。
K&R C分成了8章,海带根据自己的理解在每章中挑出最为有意思的地方与大家一起分享。
1、导言这一章是对C语言的概要介绍,著名的hello world便是从这里开始的。
如果你稍有一些编程的思想,看完这一章就应该能够写出简单的C语言程序,遇到语法问题,直接跳到下面的章节中去找就可以了。
海带一直觉得开发人员是应该有技术敏感性的,有的人简单看看语法就可以写出高效的代码,但有的人即使写了十几年代码最多是中规中矩,没有灵魂。
2、类型、运算符与表达式在这一章,大家可以记住变量的有关概念,比如什么是声明,什么是定义?再比如C语言是强类型语言,变量的名称表示这个变量在内存中的地址,而变量的类型则决定了变量所占的内存字节数。
嗯,估计好多的Java的程序员是不太了解的,你是不是挺开心?
3、控制流这一章讲了if-else/switch-case/while、for循环,另外也要注意这几个语句与break/continue/go语句的使用。
海带悄悄的告诉你,我们写代码程序其实就是为了改变EIP(32位CPU)/RIP(64位CPU)指令指针寄存器的值,这几条语句因此而生。
因为EIP或RIP这个寄存器中保存的永远是CPU要执行的下一条指令的地址,只要控制了EIP或是RIP中的值,就控制了CPU的走向。
你是不是觉得自己好厉害?
4、函数与程序结构这个就不用说了吧,随便找一本编程语言书籍,其中都会有函数的介绍,如果你不懂得如何写函数,就比较惨啦。
函数的出现是为了代码复用和分模块开发,函数可以隐藏实现的细节,使得程序结构更加清晰。
海带记得当时老师讲函数的时候重点提到了函数的重载和函数栈桢的实现原理,当然在64位CPU下,函数的实参会被优先存放在寄存器中,与32位的栈应用稍有不同。
海带提示:栈的出现是因为递归问题的提出,有兴趣的同学可以了解一下哦。
5、指针与数组这一章比较重要,也算难点,当然,如果你写过汇编语言的代码,对于指针和数组的理解就比较容易了。
可以简单地记一下,指针、数组名、函数名都是地址,或者指向内存中的数据或者指向代码,合理地使用指针会让代码更简单、清晰,好吧,说得太简单,汗一个。
在海带C语言推荐系列中的另外三本书中会对指针和数组有更深入的讨论。
6、结构这一章介绍了结构体,有点面向对象的思想了。
海带提醒大家注意两个问题:一个是内存对齐,也就是说在结构体中变量声明的顺序会影响结构体的大小哦;另外一个是结构实例拷贝,也就是深拷贝和浅拷贝的问题。
7、输入输出/UNIX系统接口把这两章放一起是因为这两章都与ANSI C标准库相关,严格来说这并不是C语言本身的组成部分,比如标准输入输出、文件操作等等。
海带提示:大家知道ANSI C标准库是一个字典就行,不用刻意去记,用到的时候就去查。
0x03 小典故这本K&R C中的K是Brian W. Kernighan(BWK),并不是Ken Thompson那个Ken爷爷哦,BWK不是C的发明者,但他参与写下了这本全世界知名的K&R C。
D爷爷就不多介绍了,据D说,在他、Ken和BWK三人中,BWK最能写文章,他次之,而Ken写得最少,但说到编程,Ken爷爷才是当之无愧的老大,有关Ken爷爷的故事我们以后再说。
在D爷爷去世后,Rob Pike在Google Plus发了一条简短消息,外界才知道这位伟大的大牛已经不在了,十分伤感地说!
后来全世界的程序员纷纷留言“bye world”或“;”来表达对D爷爷的敬仰之情。
注:在C语言中分号;代表一行的结束。