您的位置:

c语言发展图解,c语言发展史

本文目录一览:

C语言的发展史是怎样的?

发展史:

C语言的祖先是BCPL语言。

1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Pogramming Language)语言。

1970年,美国贝尔实验室的 Ken Thompson。以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。

在1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

为了使UNIX操作系统推广,1977年Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

1978年由美国电话电报公司(ATT)贝尔实验室正式发表了C语言。

1990年,国际标准化组织ISO(International Organization for Standards)接受了89 ANSI C 为I SO C 的标准(ISO9899-1990)。

1994年,ISO修订了C语言的标准。

1995年,ISO对C90做了一些修订,即“1995基准增补1(ISO/IEC/9899/AMD1:1995)”。

1999年,ISO有对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,尤其是对C++中的一些功能,命名为ISO/IEC9899:1999。

2001年和2004年先后进行了两次技术修正。

目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别。

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

c语言的发展史

C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。

C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由 肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。

后来于1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程序开发工具,一般都支持符合ANSI C的语法。

C语言是一个程序语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言也很适合搭配汇编语言来使用。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

早期发展

C语言最早是由丹尼斯·里奇为了在PDP-11电脑上运行的UNIX系统所设计出来的编程语言,第一次发展在1969年到1973年之间。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来。早期操作系统的核心大多由汇编语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。

KR C

1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序员称作“KR C”,第二版的书中也包含了一些ANSI C的标准。KR C主要介绍了以下特色:

结构(struct)类型

长整数(long int)类型

无符号整数(unsigned int)类型

把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道用户要处理i = -10还是i =- 10,使得处理上产生混淆。

即使在后来ANSI C标准被提出的许多年后,KR C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行KR C的标准。

ANSI C 和 ISO C

1989年,C语言被 ANSI 标准化(ANSI X3.159-1989)。标准化的一个目的是扩展KR C。这个标准包括了一些新特性。在KR出版后,一些新特性被非官方地加到C语言中。

void 函数

函数返回 struct 或 union 类型

void * 数据类型

在ANSI标准化自己的过程中,一些新的特性被加了进去。ANSI也规定了一套标准函数库。ANSI ISO(国际标准化组织)成立 ISO/IEC JTC1/SC22/WG14 工作组,来规定国际标准的C语言。通过对ANSI标准的少量修改,最终通过了 ISO 9899:1990。随后,ISO标准被 ANSI 采纳。

传统C语言到ANSI/ISO标准C语言的改进包括:

增加了真正的标准库

新的预处理命令与特性

函数原型允许在函数申明中指定参数类型

一些新的关键字,包括 const、volatile 与 signed

宽字符、宽字符串与字节多字符

对约定规则、声明和类型检查的许多小改动与澄清

WG14工作小组之后又于1995年,对1985年颁布的标准做了两处技术修订(缺陷修复)和一个补充(扩展)。下面是 1995 年做出的所有修改:

3 个新的标准库头文件 iso646.h、wctype.h 和 wchar.h

几个新的记号与预定义宏,用于对国际化提供更好的支持

printf/sprintf 函数一系列新的格式代码

大量的函数和一些类型与常量,用于多字节字符和宽字节字符

C99在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1995年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。

在C99中包括的特性有:

增加了对编译器的限制,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节(extern 要求支持到 31)。

增强了预处理功能。例如:

宏支持取可变参数 #define Macro(...) __VA_ARGS__

使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。

支持 // 开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)

增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool

支持 long long, long double _Complex, float _Complex 等类型

支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。声明时使用 int a[var] 的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct 与 union 里。

变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i100;++i) 的形式,即i 只在 for 语句块内部有效。

允许采用(type_name){xx,xx,xx} 类似于 C++ 的构造函数的形式构造匿名的结构体。

初始化结构的时候允许对特定的元素赋值,形式为:

struct {int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };

struct {int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 赋值的

格式化字符串中,利用 \u 支持 unicode 的字符。

支持 16 进制的浮点数的描述。

printf scanf 的格式化串增加了对 long long int 类型的支持。

浮点数的内部数据描述支持了新标准,可以使用 #pragma 编译器指令指定。

除了已有的 __line__ __file__ 以外,增加了 __func__ 得到当前的函数名。

允许编译器化简非常数的表达式。

修改了 / % 处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明确为 -22 / 7 = -3, -22 % 7 = -1,只有一种结果。

取消了函数返回类型默认为 int 的规定。

允许 struct 定义的最后一个数组不指定其长度,写做 [] 。

const const int i 将被当作 const int i 处理。

增加和修改了一些标准头文件,比如定义 bool 的 stdbool.h ,定义一些标准长度的 int 的 inttypes.h ,定义复数的 complex.h ,定义宽字符的 wctype.h ,类似于泛型的数学函数 tgmath.h, 浮点数相关的 fenv.h。 在stdarg.h 增加了 va_copy 用于复制 ... 的参数。time.h 里增加了 struct tmx ,对 struct tm 做了扩展。

输入输出对宽字符以及长整数等做了相应的支持。

简述C语言的发展

C语言是国际上广泛流行的、很有发展前途的计算机高级语言。它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件。

早期的操作系统等系统软件主要是用汇编语言编写的(包括 UNIX操作系统在内)。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好改用高级语言,但一般的高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作、位操作等)。人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。于是,C语言就在这种情况下应运而生了。

C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。 1960年出现的ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了CPL(CombinedProgram- ming Language)语言。CPL语言在ALGOL 60的基础上接近了硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对 CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国贝尔实验室的 Ken Thompson以 BCPL语言为基础,又作了进一步简化,设计出了很简单的而且很接近硬件的 B语言( 取 BCPL的第一个字母),并用 B语言写第一个UNIX操作系统,在PDP-7上实现。 1971年在PDP-11/20上实现了B语言,并写了UNIX操作系统。但B语言过于简单,功能有限。1972年至 1973年间,贝尔实验室的 D.M.Ritchie在B语言的基础上设计出了C语言(取 BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练、接近硬件),又克服了它们的缺点(过于简单、数据无类型等)。 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,K.Thom- pson和D.M.ritchie两人合作把UNIX的90%以上用 C改写(UNIX第5版。原来的 UNIX操作系统是1969年由美国的贝尔实验室的 K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的)。

后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用。直到1- 975年UNIX第6版公布后 ,C语言的突出优点才引起人们普遍注意。1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C移植到其它机器时所做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如,VAX,ATT等计算机系统都相继开发了UNIX。随着 UNIX的日益广泛使用,C语言也迅速得到推广。C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成。1978年以后,C语言已先后移植到大、中、小、微型机上,已独立于UNIX和PDP了。现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。

以1978年发表的UNIX第7版中的C编译程序为基础,Brian W.Kernighan和 Dennis M.Ritchie(合称KR)合著了影响深远了名著《The C Programming Lan- guage》,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它被称为标准C。1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充 ,制定了新的标准,称为ANSI C。ANSI C比原来的标准C有了很大的发展。KR在1988年修改了他们的经典著作《The C Progra- mming Language》 ,按照ANSI C的标准重新写了该书。1987年,ANSI C又公布了新标准--87 ANSI C 。目前流行的C编译系统都是以它为基础的

c语言程序设计的发展过程

C语言的原型ALGOL 60语言(也称为A语言) 。

1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。

1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。

1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。

而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

为了使UNIX操作系统推广,1977年Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。

1987年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准 3.C语言的主要特点 ,即经典的87 ANSI C。C语言发展迅速, 而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。

1990年,国际化标准组织ISO(Intrernational StandardOrganization)接受了87 ANSI C为ISO C的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则略有差别。

计算机c语言发展历程

起步

C语言的第一次发展在1969年到1973年之间。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来。早期操作系统的核心大多由组合语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。

KR C

1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序设计师称作“KR C”,第二版的书中也包含了一些ANSI C的标准。KR C主要介绍了以下特色:

* 结构(struct)类型

* 长整数(long int)类型

* 无号整数(unsigned int)类型

* 把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = +10还是i =+ 10,使得处理上产生混淆。

即使在后来ANSI C标准被提出的许多年后,KR C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行KR C的标准。

ANSI C 和 ISO C(1985年)

1989 年,C 语言被 ANSI 标准化(ANSI X3.159-1989)。标准化的一个目的是扩展 KR C。这个标准包括了一些新特性。在 KR 出版后,一些新特性被非官方的加到 C 语言中。

* void 函数

* 函数返回 struct 或 union 类型

* void * 数据类型

* 在 ANSI 标准化自己的过程中,一些新的特性被加了进去。ANSI 也规定一套了标准函数库。ANSI ISO(国际标准化组织)成立 ISO/IEC JTC1/SC22/WG14 工作组, 来规定国际标准的 C 语言。通过对 ANSI 标准的少量修改,最终通过了 ISO 9899:1990。随后, ISO 标准被 ANSI 采纳。

传统 C 语言 到 ANSI/ISO 标准 C 语言 的改进包括:

* 增加了真正的标准库

* 新的预处理命令与特性

* 函数原型允许在函数申明中指定参数类型

* 一些新的关键字,包括 const、volatile 与 signed

* 宽字符、宽字符串与字节多字符

* 对约定规则、声明和类型检查的许多小改动与澄清

ANSI C 和 ISO C(1995年)

作为对标准的维护与更新,WG14 工作小组在 1995年, 对 1985 年颁布的标准做了两处技术修订(缺陷修复)和一个补充(扩展)。下面是 1995 年做出的所有修改:

* 3 个新的标准库头文件 iso646.h、wctype.h 和 wchar.h

* 几个新的记号与预定义宏,用于对国际化提供更好的支持

* printf/sprintf 函数一系列新的格式代码

* 大量的函数和一些类型与常量,用于多字节字符和宽字节字符

C99

它被ANSI于2000年三月采用。

在C99中包括的特性有:

* 对编译器限制增加了,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)

* 预处理增强了。例如:

o 宏支持取参数 #define Macro(...) __VA_ARGS__

o 使用宏的时候,参数如果不写,宏里用 #,## 这样的东西会扩展成空串。(以前会出错的)

o 支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)

* 增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool

o 支持 long long, long double _Complex, float _Complex 这样的类型

* 支持 : : % % %: %:%: ,等等奇怪的符号替代,DE 里提过这个

* 支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。

* 变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效。

* 当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的构造函数

初始化结构的时候现在可以这样写:

*

struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };

struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 赋值的

* 字符串里面,\u 支持 unicode 的字符

* 支持 16 进制的浮点数的描述

* 所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I64) 对应新的 long long 类型。

* 浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编译器指定

* 除了已经有的 __line__ __file__ 以外,又支持了一个 __func__ 可以得到当前的函数名

* 对于非常数的表达式,也允许编译器做化简

* 修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7 = -3, -22 % 7 = -1 而现在 -22 / 7 = -4, -22 % 7 = 6

* 取消了不写函数返回类型默认就是 int 的规定

* 允许 struct 定义的最后一个数组写做 [] 不指定其长度描述

* const const int i; 将被当作 const int i; 处理

* 增加和修改了一些标准头文件, 比如定义 bool 的 stdbool.h 定义一些标准长度的 int 的 inttypes.h 定义*复数的 complex.h 定义宽字符的 wctype.h 有点泛型味道的数学函数 tgmath.h 跟浮点数有关的 fenv.h。stdarg.h 里多了一个 va_copy 可以复制 ... 的参数。time.h 里多了个 struct tmx 对 struct tm 做了扩展

* 输入输出对宽字符还有长整数等做了相应的支持

* 但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。