参考:《C Primer Plus》,Stephen Prata著,姜佑译。
ANSI/ISO C标准
美国ANSI成立委员会X3J11,于89/90年,99年,11年,发布C标准:C89/C90,C99,C11。
ANSI/ISO 各版本C标准
C标准
描述
经典C
也称K&R C,87年K&R著作《C语言程序设计》,成为C指导标准
C89/C90
89年ANSI C,90年ISO C,定义了C语言和C标准库。X3J11开发,同一套标准,发布名称/机构不同。
用意:作为实现,应该针对目标计算机定义适合特定操作,而不是强加一个抽象、统一的定义。
特点:
1.信任程序员;
2.不妨碍程序员做任何事;
3.语言简单精炼;
4.只提供一种方法执行一项操作;
5.不为程序可移植性牺牲效率。
C99
C9X委员会修订,遵循C90原则。
新特性:
1.支持国际化编程;
2.调整现有实践致力于解决明显的缺陷;
3.为适应科学和工程项目中关键数值计算,提高C适应性;
C11
特点:
1.不强调信任程序员;
2.不要求服务小型机市场供应商支持目标环境用不到的特性;
C语言标准众多,要如何判断编译器所支持的标准版本?
一个简单的方法是,依据不同版本标准所支持的数据类型关键字来判别,如下表所示:
C语言数据类型关键字
K&R给出的关键字(87 经典C)
C90添加关键字
C99添加关键字
int
signed
_Bool
long
void
_Complex
short
_Imaginary
unsigned
char
float
double
那么,可以在C程序中,定义相应类型,然后build是否支持来判断。
下面在Ubuntu OS下以为例,进行测试。
GCC版本=4.8.4
测试代码:
//C99.c
#include <stdio.h>
#include <stdint.h>
int main(void)
{
// C90
signed int a = -10;
printf("a=%d\n", a);
// C99
_Bool b = 1;
if (b)
{
printf("b is true.\n");
}
else{
printf("b is false\n");
}
return 0;
}
运行结果表明编译器支持C99: