计算机c语言发展历程
2008-04-03
展开全部
起步
C语言的第一次发展在1969年到1973年之间。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来。早期操作系统的核心大多由组合语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。
K&R C
1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色:
* 结构(struct)类型
* 长整数(long int)类型
* 无号整数(unsigned int)类型
* 把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = +10还是i =+ 10,使得处理上产生混淆。
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。
ANSI C 和 ISO C(1985年)
1989 年,C 语言被 ANSI 标准化(ANSI X3.159-1989)。标准化的一个目的是扩展 K&R C。这个标准包括了一些新特性。在 K&R 出版后,一些新特性被非官方的加到 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 这样的类型
* 支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个
* 支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。
* 变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100;++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却似乎对此不感兴趣。
C语言的第一次发展在1969年到1973年之间。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来。早期操作系统的核心大多由组合语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。
K&R C
1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色:
* 结构(struct)类型
* 长整数(long int)类型
* 无号整数(unsigned int)类型
* 把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = +10还是i =+ 10,使得处理上产生混淆。
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。
ANSI C 和 ISO C(1985年)
1989 年,C 语言被 ANSI 标准化(ANSI X3.159-1989)。标准化的一个目的是扩展 K&R C。这个标准包括了一些新特性。在 K&R 出版后,一些新特性被非官方的加到 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 这样的类型
* 支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个
* 支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。
* 变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100;++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却似乎对此不感兴趣。
参考资料: http://wiki.cprogram.cn/index.php/C%E8%AF%AD%E8%A8%80
展开全部
C语言是在70年代初问世的,一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的<>一书,通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表,通常称之为ANSI C。当代最优秀的程序设计语,早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语言之一。C语言是一种结构化语言,一般不具备逻辑关系。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强,它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构;而且它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
计算机发展历程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询