C语言是一个非常伟大耀眼的语言,任何比C语言更低级的语言,都不足以完整地抽象一个计算机系统;任何比C语言高级的语言,都可以用C语言来实现。今天大家就和小编来一起欣赏一下神奇的C语言吧!

C语言之父
丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日-2011年10月12日),美国计算机科学家。黑客圈子通常称他为“dmr”。他是C语言的创造者、Unix操作系统的关键开发者,对计算机领域产生了深远影响,并与肯·汤普逊同为1983年图灵奖得主。
克尼汉评价道:牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。
里奇的生命水平线如下:
C语言的先辈
BCPL语言之父
马丁·理察德(英语:Martin Richards,1940年7月21日-),生于英国,计算机科学家,为BCPL编程语言的发明者,发展了TRIPOS操作系统。
1966年,马丁·理察德在剑桥大学,以CPL编程语言为基础,发明了BCPL编程语言。
B语言之父
肯尼斯·蓝·汤普逊(英语:Kenneth Lane Thompson,1943年2月4日-)小名肯·汤普逊(英语:Ken Thompson),美国计算机科学学者和工程师。黑客文化圈子通常称他为“ken”。在贝尔实验室工作期间,汤普逊设计和实现了Unix操作系统。他创造了B语言(基于BCPL) — C语言的前身,而且他是Plan 9操作系统的创造者和开发者之一。与丹尼斯·里奇同为1983年图灵奖得主。
2006年,汤普逊进入Google公司工作,与他人共同设计了Go语言。
Unix与C语言
01 C语言时间线
从图中时间线,可以明显的看出C语言的起源以及时间节点。
02 unix时间线
Unix的诞生与C语言被广泛的传播、使用,有着密切的联系。
上图时间线只显示前几个与C语言在相同时间段内诞生的Unix版本
PDP-Unix系统内核代码文件 ·
First Edition Unix系统内核代码文件

Second Edition Unix系统内核代码文件
从C语言在Unix V2版本出现之后,Unix的V3版本开始,已经可以在Unix内核中见到大量C语言编写的代码。
在1980年代,C语言的使用广泛传播,并且几乎所有机器体系结构和操作系统都可以使用编译器。尤其是,它已成为个人计算机的编程工具,无论是用于这些机器的商业软件制造商,还是对编程感兴趣的最终用户,都非常受欢迎。
第一个C语言编译器是怎样编写的?
先用汇编语言编写一个C语言的一个子集的编译器,再通过这个子集去递推,进而完成完整的C语言编译器。
详细的过程如下:先创造一个只有C语言最基本功能的子集,记作C0语言,C0语言已经足够简单了,可以直接用汇编语言编写出C0的编译器。依靠C0已有的功能,设计比C0复杂,但仍然不完整的C语言的又一个子集C1语言,其中C0属于C1,C1属于C,用C0开发出C1语言的编译器。在C1的基础上设计C语言的又一个子集C2语言,C2语言比C1复杂,但是仍然不是完整的C语言,开发出C2语言的编译器 …… 如此直到CN,CN已经足够强大了,这时候就足够开发出完整的C语言编译器的实现了。至于这里的N是多少,这取决于你的目标语言(这里是C语言)的复杂程度和程序员的编程能力。简单地说,如果到了某个子集阶段,可以很方便地利用现有功能实现C语言时,那么你就找到N了。下面的图说明了这个抽象过程:
下载地址:
http://minnie.tuhs.org/Archive/Applications/Early_C_Compilers/last1120c.tar.gz
下载源码解压缩之后,目录结构如下:

BCPL、B、C语言比较
01 3种语言代码示例
分别使用BCPL、B、C三种语言实现一个简单的程序:程序将三个数字a、b、c相加,并将结果赋值给sum,最后打印总和。
BCPL语言示例

LET 声明变量
:= 符号为赋值符号 Go中也有该符号,表示函数内部局部变量。这里感觉很有意思的一点是:最初B语言之父肯.汤普逊把:=符号改成了=符号。现在,也作为Go语言之父之一,又把:=符号请回来了
B语言示例

语句auto ...是一个声明。即,它定义了要在函数内使用的局部变量
putnumb 是一个带参数的库函数,它将在终端上打印一个数字
C语言示例·

02 示例代码中三者的区别
通过上面例子可以三者的区别:
C语言写法更接近于B语言
BCPL、B语言都是无类型的语言,用word/cell表示一个固定长度的bit。C语言是有类型的
如果想要知晓三者的具体区别的话,建议阅读丹尼斯.里奇关于《C语言发展史》的文章
03. 历史为什么选择C语言
1960s年代后期,贝尔实验室对计算机系统的研究进入繁盛时期。MIT、General Electric、Bell实验室合作的Mutlics项目以失败而告终(1969年左右)。后来在写出第一个版本的Unix时,觉得Unix上需要一个新的系统编程语言,他创造了一个B语言。B语言是没有类型的C,准确说B语言是Tompson把BCPL挤进8K内存,被其个人大脑过滤后的产生的语言。
由于B语言存在的一些问题,导致其只是被用来写一些命令工具使用。恰好在这个时期,Ritchie在B语言的基础上,进行了重新的设计改良,从而诞生了C语言。
1978年,K&R编写的《The C Programming Language》出版,进一步推动了C语言的普及。
总之:对的时间、对的地点,出现了对的人以及工具
04 标准C库及代码
C语言及其标准经过若干次迭代之后,其标准中指定了很多C标准库,而不同的系统都有自己不同的代码实现。
标准C库·
C标准函数库共有29个头文件:
linux/lib/string.c·
lnux kernel 地址 https://www.kernel.org/
结束语
怎么样,看下来是不是觉得这是一门纵使千言万语也说不尽的语言,这些文字也仅仅只是冰山一角。