1.1 C的起源和发展
1.1.1 计算机语言发展的三个阶段
如图1-1所示,计算机语言的发展主要分为三个阶段。
图1-1 计算机语言发展的三个阶段
1.机器语言
第一代计算机语言称为机器语言。机器语言就是0/1代码。计算机只能识别0和1。在计算机内部,无论是一部电影还是一首歌曲或是一张图片,最终保存的都是0/1代码,因为CPU只能执行0/1代码。那么这是不是就意味着我们编程一定要用0/1代码呢?首先这么编写肯定是可以的,但是这样太麻烦,而且很不好理解,所以后来就出现了汇编语言。
2.汇编语言
汇编语言就是将一串很枯燥无味的机器语言转化成一个英文单词。比如说:
add 1, 2;
add就是一个英文单词,这样看起来就稍微有一些含义了,即1和2相加。这个就是汇编语言。
如果直接用机器语言编写的话,这几乎是无法实现的。因为用机器语言太难记忆了,也没人能看得懂。所以后来就设计出了第二种语言,即将0/1代码翻译为英文单词,这些英文单词直接对应着一串0/1指令。这个就是汇编语言。通过专门的软件就可以将这些英文单词转化成0/1代码并由计算机执行,这种专门起翻译的作用的软件叫作编译器。这些英文单词和与它们对应的0/1代码之间的对应关系,以及语言的语法,在编写这个软件的时候就已经写在里面了。我们只要通过编译器就可以将这些都转化成0/1代码。这样大大方便了我们对程序的编写。
3.高级语言
汇编语言之后又出现了第三代语言。第三代语言又叫“高级语言”。高级语言的发展分为两个阶段,以1980年为分界线,前一阶段属于结构化语言或者称为面向过程的语言,后一阶段属于面向对象的语言。
什么叫面向过程,什么叫面向对象?这是很难解释的一个问题,所以这个问题大家现在先不要考虑。等到将来你们学完C语言、C++、Java或者C#之后才有可能理解。因为这个需要比较。
总之,面向过程语言中最经典、最重要的就是C语言。Fortran、Basic和Pascal语言基本上已经很少有人使用了。但是C语言一直在用,因为C语言是计算机领域最重要的一门语言。但是C语言也有缺陷,它的缺陷只有在学完面向对象语言之后才能体会到。
所以从20世纪80年代开始又产生了另外一种“以面向对象”为思想的语言,其中最重要、最复杂的就是C++。C++从易用性和安全性两个方面对C语言进行了升级。C++是一种较复杂、难学的语言,但是一旦学会了则非常有用。因为C++太复杂,所以后来就对C++进行了改装,产生了两种语言,一个是Java,另一个是C#。
Java语言是现在最流行的语言之一。C#则是微软公司看Java很流行而写的一个与Java语法相似的语言。因为Java和C#几乎是一模一样的,所以你只需要学习其中的一种语言就可以了。
1.1.2 语言运行速度的比较
计算机语言越是低级速度就越快,因为越低级就越符合计算机的思维。所以计算机语言中执行速度最快的是机器语言,汇编语言其次,高级语言的速度最慢。高级语言中C的速度最快,C++其次,最慢的是Java和C#。Java和C#虽然速度慢,但它们在任何机器上都可以运行,而且运行结果一模一样,这是它们的一个优点,也是它们流行的原因之一。
1.1.3 C语言的演变过程
与C语言相关的语言很多。其中最早的一门语言叫Algol 60,是1960年产生的,它是真正的第一门面向问题的语言。但是这门语言离硬件比较远,所以1963年剑桥大学在Algol 60的基础上研发出了CPL。CPL同Algol 60相比更接近硬件一些,但规模比较大,难以实现。1967年剑桥大学的马丁·理查兹(Martin Richards)对CPL进行了简化,产生了BCPL。BCPL中的B就是Basic的缩写,即“简化的”。
1970年,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员肯·汤普森(Ken Thompson)以BCPL为基础,设计出了很简单而且很接近硬件的B语言(取BCPL的首字母)。B语言是贝尔实验室开发的一种通用程序设计语言。虽然它没有流行起来,但是它很重要。肯·汤普森用B语言做了一件很重要的事情,一直影响至今,即他用B语言写出了世界上第一个操作系统——UNIX操作系统。
1971年,贝尔实验室的丹尼斯·里奇(Dennis Ritchie)加入了肯·汤普森的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更加成熟。
1972年,丹尼斯·里奇在B语言的基础上最终设计出了一种新的语言,他以BCPL的第二个字母作为这种语言的名字,即C语言。
1973年年初,C语言的主体完成。肯·汤普森和丹尼斯·里奇开始用C语言完全重写UNIX,这就是UNIX第5版。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为其最主要的开发语言,其中还有不少继承肯·汤普森和丹尼斯·里奇之手的代码。
UNIX系统是世界上第一个真正的操作系统。由于UNIX操作系统是用C语言编写的,而这个系统很流行,于是C语言也跟着流行起来。而UNIX操作系统是开源的,所以别人要想学习,就要先学C语言。
B语言被C语言改写后,C语言流行了而B语言就被淘汰了。而且后来发现,C语言的确非常好,它是面向过程语言的代表,是有史以来最重要的一门计算机语言。
随后又出现了C++。C++是本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)编写的,他也来自贝尔实验室,是C语言创始人丹尼斯·里奇的下属。C++就是在C语言的基础上发明的。C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。
后来Sun公司又对C++进行改写,产生了Java。而微软公司发现Java很流行,就造出了一个类似的语言——C#。所以Java和C#都源自于C++。
以上就是C语言演变的过程。从这个过程我们可以看出,如果以后要学习C++、Java或者C#的话,那么C语言就必须要学!因为它们都源自于C语言。而且C语言中绝大部分的知识,在C++、Java、C#中几乎都会用到。C语言里面有两个知识点是必须要学的,一个是函数,另一个是指针。这两个知识点是整个C语言的主体和核心。而且这两个知识点在其他语言中是学不到的,或者是同C语言中有差别。总之,C语言是它们的“老祖宗”,学习其他语言之前最好要将C语言学好。