C语言之所以命名为C,是因为源自Ken Thompson发明的B语言,而B语言则源自BC-PL语言。C语言形成于著名的贝尔实验室,于1972年形成雏形。其中有个重要的人物就是丹尼斯·里奇(Den-nis Ritchie),被称为C语言之父,如图3-2所示。
图3-2 C语言之父
谈到C语言的发展,就不得不提UNIX系统,因为C语言形成的重要原因是早期科学家们用来开发UNIX系统的。由于汇编语言需要借助各种各样的助记符,移植起来非常困难,因此科学家们不得不转换思路来开发代码量巨大的UNIX系统。C语言采用程序化的编程风格,模块化的编程思想,极大地简化了开发UNIX系统的复杂度。
C语言作为高级编程语言,不是一蹴而就的。在1972年C语言刚开始形成,后来由C语言之父丹尼斯·里奇和他的搭档布莱恩·科尔尼干共同开发K&R C版本,这个版本要早于标准C语言版本,因此业界不认为这是一个正式的版本。直到1989年由美国国家标准局(American National Standards Institute,简称ANSI)正式批准C语言标准。这也就是人们经常使用和提到的C89标准。接着在1990年提交到ISO(国际标准化组织),形成了ISO C90标准。我们以后再看到ANSI C89或ISO C90就不需要疑惑了,它们是一个概念,都是标准C语言。C语言的标准也是不断变化和完善的,比如1999年修订的C99标准、2011年修订的C11标准。因此如非特殊说明,我们使用的都是标准C语言,但是涉及使用的哪个版本的C标准,需要根据年限来推断。
在近几年的Linux系统发行版本中一般都是内置了gcc编译器,可以通过gcc--version命令来查看gcc的版本,以及支持的C标准,如图3-3所示。也可以使用man gcc来直接查看gcc支持的C标准,如图3-4所示。
图3-3 查看gcc编译器的版本
图3-4 Ubuntu 16.04 LTS查看gcc支持的C标准