发展历史
C语言的原型ALGOL 60语言。(也称为A语言)
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。
而在1972年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著了著名的《TheC ProgrammingLanguage》一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。
1987年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准化协会(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准 3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件, 如DBASE ⅢPLUS、DBASE Ⅳ 都是由C语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,像PC- DOS、WORDSTAR等就是用这种方法编写的。
1990年,国际标准化组织ISO(International StandardOrganization)接受了87 ANSI C为ISOC的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。目前流行的C语言编译系统大多是以ANSIC为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别。
http://leadgenius.cublog.cn/
优点
1. 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2. 运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3. 数据结构丰富
C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4. C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5. C语法限制不太严格,程序设计自由度大
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
6. C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
7. 生成目标代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
8. C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。
缺点
1. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
[C语言指针]
指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性,适合初学者使用。
Dennis M.Ritchie(丹尼斯.里奇)
Dennis M.Ritchie 1941年9月9日出生在Bronxville,从哈佛大学获得物理学士学位。1968年获得其应用数学博士学位,论文题目是:Subrecursive Hierarchies of Functions。Dennis于1967年加入贝尔实验室。Dennis的父亲Alistair E. Ritchie也曾长期在贝尔实验室工作,并是”The Design of Switching Curcuits”一书的作者之一。加入贝尔实验室不久,Dennis参与了Multics项目。Multics项目为后来UNIX的产生打下了许多技术基础。Dennis除了与Ken Thompson发明与实现了UNIX操作系统之外,还是著名C语言的发明人。C语言来源于Thompson实现的B语言。C语言发明后,UNIX被用C来重写,从而使得UNIX的可移植性极大的提高。另外,Dennis也是UNIX中STREAM机制的作者。90年代,Dennis与其同事提出并实现了Plan 9操作系统和Inferno操作系统。Dennis M.Ritchie于1983年(第十八位)获得了计算机界的最高奖——图灵奖。在这不得不提到他是唯一获得图灵奖的两名工程师之一。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项。...
为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。即是著名的ANSI C。
1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C 语言,后来由美国国家标准协会(American National Standards Institute)在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。
1988年,随着微型计算机的日益普及, C语言出现了许多版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
Dennis M. Ritchie访谈纪实:
==访谈纪实(开始.Begin)================================================================
LF:如同许多孩子对超人崇拜一样,全世界也有很多的 C 程序员和 UNIX 迷把你当成了他们的偶像。你能谈谈这种被众多人崇拜的感觉吗?根本无法想象如果这个时代没有了 UNIX 和 C 会变成怎样。当你在创造 C 和 UNIX 的时候,你想过它们将会成为计算机科学的“未来”吗?
Dennis:这两个问题非常相似也经常被问到。显然,我和我的合作者所取得的那些奖励都是很令人振奋的。我们也为能创造一些有真正价值的东西而感到高兴。但是,我们不认为这就是计算机科学的“未来”甚至根本就无法预见到这个学科的最终发展结果会是什么样子。本着“物有所用”的精神我们开始致力于这项研究开发工作,其间还做了一些帮助其他人加入进来的工作。有一点值得我们重视:尽管 Unix 和 C 或者 C++ 的程序是非常有效的,但不可否认的是计算机科学技术领域及其实际产品开发潜力仍然很巨大。这一方面反映在高校的编程语言研究方向上,另一方面也反映在商业软件领域。
LF:如果 UNIX 被选做过去和当前的操作系统,那么尽管过去几年出现了一些面向对象的语言 C 也将毫无疑问的被认为是“唯一的语言”。你怎么看待 C++ 和 Java,以及 C 和 C++ 程序师之间在 UseNet 上经常发生的激烈争论呢?
C 被设计成为一种便携式汇编语言,对于这一特性人们褒贬不一。C++ 则试图把编程方法提高到面向对象这种更抽象的层次上来。
Dennis:C++ 的很大一部分得宜于 C。因为 C 早在 C++ 出现之前就已经具有了非常好的兼容性,所以 C++ 才可以采用 C 作为建构自身的基础并使用它来开发自己的编译器。C 被设计成为一种便携式汇编语言,对于这一特性人们褒贬不一。C++ 则试图把编程方法提高到面向对象这种更抽象的层次上来。从最近形成的标准来看,二者共同的缺点是:带有过多的装饰和附属物。同样的,它们都采用了相同的编程思想,都试图按照真正的需求来编写代码。Java 显然是 C++ 的改进版本。它砍掉了 C 中的指针操作部分,引入了生成独立于机器的目标文件这种编程思想(虽然这个思想并不是很新的,但是也许直到现在它才真正可行了)。既然 Sun 和 Microsoft 公司(它的产品同样的有过多的装饰附件)已经把 Java 作为它们之间竞争的工具,谁也难以预料事态将象何处发展。
LF:这里有一个假想的问题:在经过了这么多年的 C 经验之后,如果从现在的角度出发让你重新设计 C 语言的话,你会有些不同的设想吗?
Dennis:很长时间以来,我一直在找一种能使多数人支持 ANSI/ISO 标准的办法(假定时间是有限制的)。就拿完善函数参数类型声明(在1989 C 标准中称作函数接口)这件事来说吧。有许多细节比它们看起来的还要杂乱得多。例如,对“static”这个词含义的理解会因不同的使用目的而混淆其用法。直到现在我还对有关语言声明的语法不太确定,在这些声明里面其语法结构总是模仿那些应用于变量声明的语法。虽然这一点引起了强烈的批评,但是应该说它还是有一定的逻辑的。
LF:虽然 C 是一种结构好、定义比较完备的语言,而操作系统却在不断的更新着。一些新的观念随着硬件速度的提高和价钱的降低而出现。你认为将来什么才有可能成为操作系统设计基础上的关键问题呢?特别的,对于微内核与单片机设计之间的对抗你有什么看法呢?
Dennis:我不认为这是一个有趣的论点,而且应该被摒弃。我更喜欢 Unix(包括 Linux)、Plan 9、Inferno 这个系列的操作系统,它们在其应用环境里提供了一种结构化、通用的命名空间和资源访问机制。在我看来微内核不会成为实际应用中的重点,至少不会作为多用途操作系统的基础。实际上,微内核正逐渐的趋向于专门为大型操作系统服务。它或许可以保留一些用于系统内部结构的有效工具,但它自己是不能独立存在的。当然了,世界这么复杂,有些情况下越是小型的操作系统反而越是有用,例如某些小的用途单一的设备装置就不可能采用那些桌面或者车间里使用的多用途操作系统。
LF:UNIX 是一个有着悠久历史的操作系统。从它多年前诞生的那一刻起至今,其在网络、硬件、服务及应用方面的兼容性和需求都发生了非常巨大的进展。面对现在和不远的将来用户的需求,你认为 UNIX 目前存在那些限制或者说是障碍?
Dennis:从基本的系统 API(“系统调用”)上来看,我认为没有什么基本原理或者技术上的限制。当然,只要 Unix 之间以及现在出现的各个“免费”Unix 供应商(包括Linux 和 BSD 在内)之间的竞争存在,大量的商业/政治的争论就会出现。
LF:最近,很多人都在关注着临近的 2000 年问题,担心因特网的发展会因为这个声明狼籍的“千年虫”而延缓下来。在这些专家的预言中,你觉得那些是比较有根据的呢?
Dennis:事实上,我认为关于这个问题还没有比较明智的解释。在1999年12月31日23:59这个时刻,我是不会在飞机上的。而实际上我这一生中从没有在新年里接近过飞机。看来我不必为这个“千年虫”而害怕乘坐飞机了。
LF:下面我想跟你谈谈你正开发的 Inferno 操作系统。你能说一说设计这种全新的操作系统及使用其自身编程语言——Limbo 的初衷吗?为什么不用已有的 JavaVM/Java 而用 Inferno/Limbo 呢?换言之,Inferno 能提供那些 Java 所没有的吗?
Dennis:Inferno 是由 Phil Winterbottom 和 Rob Pike 创造出来的。这项工作恰好开始于 Java 流行(公开其内核)之前。Java 在没有成型之前其前身被内部人士称作 Oak,而当时 Inferno 也还处于雏形阶段。尽管当时我们已经开始注意到 Java ,却没有想到它会象现在这样流行。我认为 Sun 公司和我们是殊途同归,最终都认识到这样了一项相同的技术——基于便携虚拟机来实现语言。Inferno 的思想源于对 OS 技术的有趣探索:是否能开发这样一种语言和操作系统——它既可以在各种硬件条件下运行,还可以在各种操作平台(包括 Windows、Unix 及 Linux)上对等的应用。与此同时,有人资助 Sun 公司进军迅速壮大的 WWW 及浏览器市场,在此过程中他们也认识到了这项技术。
LF:在我们看来,Limbo 编程语言的未来要依赖于 Inferno 这个操作系统的普及和发展。不知道是否有意将 Limbo 移植到其它操作系统上?还是说它就是专门为 Inferno 设计的而不能移植呢?
Dennis:就技术方面讲,Limbo 不是必须依赖 Inferno 的。而在实际上它还是要依赖 Inferno 的。最简单的一个原因就是,一种新的语言必须依赖于它习惯了的应用环境。
LF:回顾一下你在贝尔实验室的工作,你看起来每时每刻都在做着自己真正喜欢的项目。我可不可以假设你也是出于同样的喜欢 Inferno 才致力于它的开发呢?我断言:你真正热爱 UNIX 和 C 的设计工作,是不是这样呢?
Dennis:我确实喜欢我在贝尔实验室的工作(而且还将继续下去)。
LF:不可避免的我要把你和所有正致力于那些非赢利(或者说是免费)项目的人们做个比较。这些人之所以这么做只是因为他们喜欢这样。当然如果有人因此而付给他们报酬,我可以确定的说他们是不会拒绝的。如果不是在贝尔实验室工作的话,你会不会也投入到类似于 Linux 的项目中来呢?这些从事于免费项目的人大多来自于很有创新的实验室并具有丰富 UNIX 及 C 经验的人,你是如何看待他们的呢?既然我们这个杂志主要是针对 Linux 用户的,我就不免要问你一些关于 Linux 的问题。第一个问题是:很多公司做出决定开始开发 Linux 下的软件(包括贝尔实验室的 Inferno 也有了与 Linux 的接口),你是如何看待 Linux 的全部动力及上述现象的呢?
Dennis:我把这些问题放到一起来回答。我认为 Linux 现象是非常让人高兴的事情。因为它强烈的震撼了 Unix 提供的基础。尽管还有象 BSD 这样的不但品种多而且还得到了工作站及大型机制造商支持的 Unix 存在,而 Linux 看起来才是最健康的 Unix 派生系统之一。当然,还有一种现象不得不引起我的关注。那就是这个源于 Unix 的“免费资源”世界也正在陷入分裂和竞争之中。而这中分裂和竞争的现象是一直存在于商界的。
LF:还有一个关于 Linux 的大问题:你用过 Linux吗?如果用过的话,你对它的看法如何?
Dennis:事实上我还没有真正的使用过它。如果把我日常的计算都搬到它上面来,这在我看来说恐怕是不能接受的。我本人的计算世界是个由 Plan 9、Windows 及 Inferno 构成的奇怪组合。我非常欣赏 Linux 的生气和活力。时常有人问我一个非常相似的问题,仿佛是为了等着我对 Linux 与 Unix 之间由商业公司挑起的版权及商标争端表示我的愤怒或嫉妒。但是我一点也没有这种感觉,相反我认为二者都是 Ken 和我还有其他人多年前那些思想的延续。
LF:谈到微软公司……你怎么看待该公司现在对于桌面计算机系统的垄断?在过去的科幻电影描述里,我们可以看到一个世界完全由庞大的计算机来主宰,它制定了人们生活的所有规则。而眼前的现实由给我们显示了一个完全不同的图象。计算机逐渐由倍受景仰演变成为一个简单的工具。作为一个系统开发员,一个科幻爱好者,你一定设想过现实计算机系统的形势。那么,你对计算机系统的将来有什么设想呢?你认为 Inferno 和 Linux 在将来会处于一个什么样的位置呢?
Dennis:这是两个很好的问题。微软公司确实在桌面计算机系统领域实行了垄断。但是,这并不能代表所有的计算机系统领域。这两种提供软件的方式(如 Linux)以及那些没有象 Windows 或浏览器之战那样多的介入新闻的东西(如,非常高效的计算机系统,非常可靠的计算机系统,非常细小的计算机系统)会有他们自己的位置的。我相信 Linux 和 Inferno 都会繁荣起来的。
==访谈纪实(结束.End)==================================================================
阅读(553) | 评论(0) | 转发(0) |