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.