ANSI C C89 C90 C99 C11

缘起

没有规矩,不成方圆,这是中国的老话. 同样适用于C语言, C语言也有自己的标准

分析

C语言的这些个标准到底规定了什么?

规定了C编译器的行为. 例如硬件A平台上写的源代码P,进过硬件A平台上的编译器A编译,可以在硬件A上撒欢跑起来了. 现在要将P在硬件B上也跑起来. 则就要经过硬件B上的编译器B的编译,才能在硬件B上跑起来而且要和硬件A上运行的效果一样. 这样的话,编译器A和编译器B之间就要遵守某种规约,不能编译器A将P的这行代码翻译成一个意思,编译器B将P的同一行代码翻译成另一个意思. 那样P就不具备从硬件A移植到硬件B上的可能性了.

这种编译器之间遵守的规约就是这里讲的C语言标准. 所以不难知道跨平台的代码需要遵守以下2个条件

  1. P中没有针对具体硬件的代码,例如没有针对硬件A的代码.
  2. 编译器A和编译器B都要支持C标准.

那么P从硬件A移植到硬件B上无需改动甚至只需要做极小的改动,经过编译器B的编译就可以移植到硬件B上跑起来而且效果和P在硬件A上跑的效果一样了.

历史

  • 1983-1989, 历经6年艰苦卓绝的努力,美国信息标准协会(ANSI)给C语言定义了一套标准,史称C89,也就是ANSI C, 它也是C++的基础. 它是历史上第一个C标准——基本取代了旧式C(即C语言的两位作者Kernighan和Ritchie,或称为 KR C),ANSI C 还有一些别名——ISO C 或者 Standard C
  • 1990年,ISO协会眼红了,拿来做了点修订,就称为了C90, 但是C90基本和C89一样. 甚至大家几乎就说是C89,而不说C90
  • 2000年,ISO发布了C99标准, ISO总算给自己争了口气
  • 2011年,ISO发布了C11标准, 这是最新的C标准.