在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C 继续在改进。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年三月采用。
C99中包括的特性
1. 对编译器限制增加了,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)。
2. 预处理增强了。
3. 支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)。
4. 增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool。
5. 支持 long long, long double _Complex, float _Complex 这样的类型。
6. 支持 %: %:%: ,等等奇怪的符号替代。
7. 支持了不定长的数组。数组的长度就可以用变量了。可以用int a[*] 这样的写法来声明类型。变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100; i) 就是说,int i 的声明放在里面,i 只在 for 里面有效。(VC没有遵守这条标准,i 在 for 外也有效)。
8. 当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx}。
9. 支持 16 进制的浮点数的描述。
10. 浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编译器指定。
11. 对于非常数的表达式,也允许编译器做化简。
12. 修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7 = -3, -22 % 7 = -1 而现在 -22 / 7 = -4, -22 % 7 = 6。
13. 取消了不写函数返回类型默认就是 int 的规定
14. 允许 struct 定义的最后一个数组写做[]不指定其长度描述。
15. const const int i; 将被当作 const int i; 处理。
1