Loading AI tools
C程式語言標準的版本 来自维基百科,自由的百科全书
C99(之前名称为C9X)是ISO/IEC 9899:1999的非正式名称,是C语言标准的一个版本[1]。C99延伸了C90的内容,加入了C语言及标准函式库的新功能,让一些语言的实现(例如IEEE 754-1985浮点数,以及编译器技术)可以更妥善的利用电脑的硬体[2]。后来在2011年发行的C11取代了此版本的C语言标准。
在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化建立过程中继续发展壮大。《标准修正案一》在1994年为C语言建立了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。
在C99中包括的特性有:
restrict
, inline
, _Complex
, _Imaginary
, _Bool
long long
, long double _Complex
, float _Complex
等类型int a[var]
的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct
与 union
。for
语句提倡写成for(int i=0;i<100;++i)
的形式,即i
只在for
语句块内部有效。struct test{int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };
struct test{int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5 }; // 3,4 是对 .c,.d 赋值的
\u
支持 unicode 的字符。printf
, scanf
的格式化串增加了对 long long int
类型的支持。__LINE__
和__FILE__
以外,增加了__func__
得到当前的函数名。/
和%
处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22 % 7 = -1,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明确为 -22 / 7 = -3, -22 % 7 = -1,只有一种结果。const int i
处理。<stdbool.h>
,定义一些标准长度的int
的<inttypes.h>
,定义复数的<complex.h>
,定义宽字符的<wctype.h>
,类似于泛型的数学函数<tgmath.h>
,浮点数相关的<fenv.h>
。在<stdarg.h>
增加了va_copy
用于复制...
的参数。<time.h>
里增加了struct tmx
,对struct tm
做了扩展。标准宏__STDC_VERSION__
被定义为值199901L
来指示能够获得C99支持。就像__STDC__
宏用于C90,__STDC_VERSION__
可被用来书写对于C90和C99编译器进行不同编译的代码,下面的例子确保了inline
在二者情况下都可获得(通过在C90中将其替代为static
来避免连接器错误):
#if __STDC_VERSION__ >= 199901L
/* "inline" is a keyword */
#else
# define inline static
#endif
用于x86架构的GCC,Clang和其它一些商业编译器(如IAR Systems,ICC)现支持C99的全部特性[4],而微软和Borland支持C99的部分特性[5]。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.