vlambda博客
学习文章列表

C++与C语言的爱恨情仇,三天三夜都说不完


C语言和C++语言绝对是计算机软件界最经典和坚挺的编程语言,不论多少语言走完了诞生、发展、消亡的生命历程,这两种语言依然保有旺盛的生命力。而两者之间的关系,说是继承也好、扩展也好、父子也好,总之是有千丝万缕的关系。


C语言和C++语言之所以被称为经典,是因为Windows、Linux、UNIX、DOS四大操作系统的核心代码大部分是使用C和C++编写;之所以说坚挺,是因为当前软件领域采用的编程语言中,这两种语言基本上长期处于TOP 10的序列。所以可以说这两种语言是最牛的编程语言。


C++与C语言的爱恨情仇,三天三夜都说不完

对于C语言的诞生和起源,可以说是偶然中的必然。两位天才人物发挥了决定性的作用,不仅仅创造了一门流传于世的经典编程语言,还发明了一个超级牛叉的操作系统,称之为现代操作系统的祖父都不为过。


在详细讲述天才人物的故事之前,还需要说明一下CPL(Combined Programming Langurage)语言,因为C语言的名字就取之于其中的“C”。CPL语言是基于 ALGOL 60 的高级编程语言,由英国剑桥大学于1963年推出。发展到1967年时,英国剑桥大学的 Matin Richards对其进行了简化,推出了 BCPL (the Basic Combined Programming Language)语言。

1

C语言

C语言是一种结构化语言,有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,最大特点就是高效。


C语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作。因此既能够用于开发系统程序,也可用于开发应用软件。


C语言的起始,源自于美国AT&T公司贝尔实验室的研究员Ken Thompson。20世纪六十年代,这位天才人物某一天上班走神,闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏 —— Space Travel。于是其背着老板,找到了一台空闲的机器 —— PDP-7。

C++与C语言的爱恨情仇,三天三夜都说不完


但是这台机器没有操作系统,而这个游戏必须使用操作系统的一些功能。于是其充分发挥“自力更生、丰衣足食”的精神,着手为PDP-7开发操作系统。从此,一个超级牛叉的操作系统诞生了,后来,这个操作系统被命名为 —— UNIX。


1970年,Ken Thompson 以 BCPL 语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母),之后他开始用 B 语言写出了第一个 UNIX 操作系统,这可以被称之为 “0”号版本的UNIX操作系统。一个翘班者,设计出了一种新的编程语言,并用其编写了一个伟大的操作系统,其人不被称之为天才,什么样的人才能被称之为天才呢


紧跟着第二年(1971年),C语言的创始者出现了,这又是一个天才人物。同样酷爱Space Travel游戏的 Dennis M.Ritchie 为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX,其主要工作是改造B语言,使其更成熟。他的最终工作成果产生于1972年,是一门新的编程语言,取了 BCPL 的第二个字母作为这种语言的名字,C语言真正诞生了。可以这样说,C语言的诞生就是UNIX操作系统的“副产品”。


C++与C语言的爱恨情仇,三天三夜都说不完


谁能想象,一个游戏催生了一门经典的编程语言,这绝对是一个奇迹。能读到此的看官,是否有一试此游戏的冲动。千万别冲动,那可是20世纪六十年代的游戏,对现在的游戏玩家来说,绝对是一个打击。


到1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX操作系统。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了 UNIX 和 C语言的开发中。


随着UNIX的发展,C语言自身也在不断地完善。直到2020年,各种版本的UNIX内核和周边工具仍然使用 C语言作为最主要的开发语言,其中还有不少继承 Thompson 和 Ritchie 之手的代码。


随着 C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。截至2020年,最新的C语言标准为2017年发布的 “C17”



2

C++

C++语言是C语言的继承,既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。由于C++语言擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++语言就适应的问题规模而论,大小由之。微软的Windows 操作系统中,80%的代码是由C++语言完成的。


C++与C语言的爱恨情仇,三天三夜都说不完


1979年,大牛 Bjame Sgoustrup 到了Bell实验室,开始从事将 C语言改良为带类的C(C with classes)的工作,1983年该语言被正式命名为C++。自从C++语言被发明以来,经历了三次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。


在20世纪90年代早期,人们开始为C++语言建立标准,并成立了一个由 ANSI和ISO国际标准化组织的联合标准化委员会。该委员会在1994年1月25日提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。


标准化委员会于1997年11月14日通过了该标准的最终草案,1998年,C++的ANSI/ISO标准被投入使用。通常,这个版本的C++被认为是标准C++,所有的主流C++编译器都支持这个版本的C++。

3

总结

作为兼顾了高级语言和汇编语言优点的C语言,应用范围很广,尤其在目前各领域的嵌入式编程中更是大放异彩。但鉴于其灵活性大的特性和对冯诺依曼构型计算机的深度理解(特别是存储)的要求,让很多人选择了更易学习的其他高级语言。


目前的C/C++语言颇有些当年汇编语言的意思,那就是被应用型程序员不屑,被真正的程序员所追求,被入门型程序员仰视。原因就在于只有对C/C++语言精通掌握的程序员才是真正的程序员,才是真正对计算机系统掌握的程序员。这也是目前C/C++语言作为大学相关专业的必教课程的原因。


总之,作为最接近操作系统核心的编程语言、最高效的语言,C/C++语言必然是最经典、最牛的软件编程语言。


C++与C语言的爱恨情仇,三天三夜都说不完