当前位置:K88软件开发文章中心编程语言C/C++C/C++01 → 文章内容

C语言的标准

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:07:29

:2010-09-03 20:24:00

(1)K&R C

开始的很多年,C语言没有国际标准,只有一个事实标准——1978年Brian Kemighan和Dennis Ritchie编写的《C程序设计语言》(The C Programming Language)一书,通常称其为K&R C或经典C。该书的附录“C参考手册”(C Reference Manual)成为了C语言的实现指南,但是书中缺少对库函数标准的描述,一般以Unix实现的库函数所为事实标准。需要说明的是,因为C语言的语法成分简单,很多基本功能(例如I/O语句)都是靠库函数来实现的。所以,C语言比其它高级语言更依赖于库函数。

(2)C90

1983年ANSI(American National Standards Institute 美国国家标准协会)设立了一个X3J11小组,着手进行C语言的标准化。并最终于1989年推出ANSI C (ANSI X3.159-1989),1990年它又成为国际标准ISO C(ISO/IEC 9899:1990 Programming languages – C,程序设计语言——C),原来叫做ANSI C或ISO C,现在通常称其为C89或C90。

C90对K&R C的主要改变是,增加了函数原型(prototype),强调对函数的输入参数进行严ge的类型检查;允许将结构本身作为参数传递给函数(原来只允许传地址);并补充定义了C语言的标准函数库。增加了关键字:const(常型变量)、enum(枚举类型)、signed(有符号的,例如signed char)、void(空/无,可用于函数返回值和形参、通用指针类型)、volatile(易变变量,防止编译器错误的优化)等。还增加了预处理指令:#elif(else if)、#error(错误,强制编译停止)、#line(修改当前行号和源文件名)、#pragma(附注/编译指令,编译器定义的与实现有关的指令)。

(3)C99

对C90的修订工作开始于1994年,在ISO C++(1998)标准推出之后,ISO又于1999年12月16日,推出了C语言标准的第2版:ISO/IEC 9899:1999 Programming languages – C(程序设计语言——C),一般称其为C99。

C99主要的修订目标有三点:①支持国际化编程,引入了支持国际字符集Unicode的数据类型和库函数;②修正原有版本的明显缺点。如整数的移植方法,例如int8_t、int16_t、int32_t和int64_t等类型;③针对科学和工程的需要,改进计算的实用性。例如添加了复数类型和新数学函数。

C99对C89/C90的具体修改有:①增加了C++的//注释风ge:原来C语言只支持多行注释:/*……*/,C99现在也识别单行注释:// ……。②增加了关键字:inline(内联函数)、restrict(限制)、_Bool(布尔类型)、_Complex(复数)、_Imaginary(虚数)。③增加了数据类型:(unsigned) long long [int](64位整数)(对应的打印输出格式为%lld或%llu)。④定义了可移植整数类型,如:int8_t、int16_t、int32_t、int64_t,uint8_t、uint16_t、uint32_t、uint64_t;intptr_t、uintptr_t。以及表示对应类型常量的方法,如INT8_C(128)、INT32_C(1234)。⑤增加了浮点常量的十六进制格式:p或P表示后跟二进制指数(的十进制值)。例如:0xa.1cp10 = (10 + 1/16 + 12/256) * 210 = 10352.0。⑥增加了浮点数的十六进制打印格式符:%a或%A(代替十进制的%e或%E)、%La或%LA(代替十进制的%Le或%LE)。⑦可指定初始化的条目(未被初始化的条目全被置为0),如:int days[12] = {31, 28, [4] = 31, 30, 31, [1] = 29};⑧支持变长数组(即可用变量来定义数组的大小),如:float a[n], a2[m][n];⑨允许在代码块的任何地方定义变量(似C++)。⑩允许在结构的最后定义一个大小可伸缩的弹性数组成员,可以用于结构指针,根据允许情况来动态分配内存。但是,C99增加的新特性中,有许多当前的C++标准还不支持。



C语言的标准