到目前为止C语言的版本并不多,在开发中首先也是要确定使用哪个版本的C语言,各个版本的特性的也不尽相同,对C语言的版本不了解会造成开发中各种困惑,例如使用linux中的头文件和使用GCC编译代码时都需要注意C语言的版本选择,下面讨论一下C语言各个版本的发展和差异。
一、C语言第一个标准版本:ANSI/ISO
C标准C89/C90
C语言刚开始发展的时候,并没有C标准,使用C语言开发比较依赖库,一般来说UNIX提供的C库为标准库(C语言就是在设计UNIX系统开发的)。后来C语言应用得越来越广泛,美国国家标准协会(ANSI)在1983年开发了一套新标准,并于1989年发布,ANSI C标准定义了C语言及其标准库,国际标准组织(ISO)于1990采用了这套标准,所以ANSI
C和ISO C是同一套标准,简称ANSI/ISO标准,这是我们常见的C89标准,也叫做C90标准(通常C标准会称为ANSI C),所以第一个C标准又称为C89/C90。一般来说,对于C版本的称呼为C标准(Standard)会更好区分C语言的各个版本,因为我们编译C程序的时候可能会需要指定C标准参数,例如:-std=c90,-std=gnu99,-std=c11等。
二、C语言标准之C99标准
1994年,ANSI/ISO联合委员会修订C标准,并发布C99标准,与C90兼容,该版本的目标主要是实现国际化、弥补缺陷和提高计算实用性,C99中新增的主要特性有:增加restrict用于指针的类型修饰符;增加inline内联关键字;增加bool布尔数据类型,以及true和false;增强数组功能,如可变长数组;for语句可以在初始化部分定义一个或多个变量;复合复制;新增库,如<complex.h>支持更复杂的算法等等。
三、C语言标准之C11标准
C11标准在2011年发布,该版本改进Unicode支持、使用新的_Generic关键字的类型泛型表达式,跨平台多线程API(threads.h)以及核心语言和库(stdatomic.h)中的原子类型支持。但是在C语言开发领域,很多厂家对C99和C11支持得不是很好,C89标准很长时间都是使用的主流标准版本,使用新版本特性通常需要在编译的时候给编译器指定C版本编译参数,如-std=c99,同时也要注意目标平台是否支持使用的C标准。