<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=C99</id>
	<title>C99 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=C99"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=C99&amp;action=history"/>
	<updated>2026-07-15T07:06:52Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=C99&amp;diff=467404&amp;oldid=prev</id>
		<title>imported&gt;Alexwikix 来自 2024年12月14日 (六) 18:32</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=C99&amp;diff=467404&amp;oldid=prev"/>
		<updated>2024-12-14T18:32:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA|G1=IT}}&lt;br /&gt;
{{Not|Comic Market}}&lt;br /&gt;
{{Sidebar &amp;lt;!-- NOTE: Please don&amp;#039;t remove. Discuss naviagation concept at [[Talk:C11#Helpbox_experiment] --&amp;gt;&lt;br /&gt;
|name = C語言標準&lt;br /&gt;
|style = width:auto;background:#f5faff;font-size:90%;line-height:1.6em;&lt;br /&gt;
|titlestyle = font-size:130%;padding-left:0.4em;padding-right:0.4em;background:#cee0f2; &amp;lt;!--(gap before first heading/content:)--&amp;gt;display:block;margin-bottom:6px;&lt;br /&gt;
|title = [[C語言#歷史|C語言標準]]&lt;br /&gt;
|headingstyle = padding:0.1em 0.25em 0.15em;{{{headingstyle|}}}&lt;br /&gt;
|heading1 = [[K&amp;amp;R C]] • [[ANSI C]] • [[C99]] • [[C11 (C语言标准)|C11]] • [[C18 (C語言標準)|C18]] • [[C2x]]&lt;br /&gt;
|navbar = none&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!---[[Image:ISO-IEC-9899-1999-cover.png|thumb|180px|Cover of the C99標準文件的封面]]---&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C99&amp;#039;&amp;#039;&amp;#039;（之前名稱為&amp;#039;&amp;#039;&amp;#039;C9X&amp;#039;&amp;#039;&amp;#039;）是&amp;#039;&amp;#039;&amp;#039;ISO/IEC 9899:1999&amp;#039;&amp;#039;&amp;#039;的非正式名稱，是[[C語言]]標準的一個版本&amp;lt;ref&amp;gt;{{cite web |url=http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=29237 |title=ISO/IEC 9899:1999 - Programming languages - C |publisher=Iso.org |date=2011-12-08 |accessdate=2014-04-08 |archive-date=2016-10-10 |archive-url=https://web.archive.org/web/20161010112929/http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=29237 |dead-url=no }}&amp;lt;/ref&amp;gt;。C99延伸了C90的內容，加入了C語言及[[C標準函式庫|標準函式庫]]的新功能，讓一些語言的實現（例如{{le|IEEE 754-1985|IEEE_754-1985}}浮點數，以及編譯器技術）可以更妥善的利用電腦的硬體&amp;lt;ref name=&amp;quot;grouper.ieee.org&amp;quot;&amp;gt;{{Cite web |url=http://grouper.ieee.org/groups/754/meeting-materials/2001-07-18-c99.pdf |title=存档副本 |accessdate=2020-07-03 |archive-date=2017-06-22 |archive-url=https://web.archive.org/web/20170622221328/http://grouper.ieee.org/groups/754/meeting-materials/2001-07-18-c99.pdf |dead-url=no }}&amp;lt;/ref&amp;gt;。後來在2011年發行的[[C11 (C语言标准)|C11]]取代了此版本的C語言標準。&lt;br /&gt;
&lt;br /&gt;
==歷史==&lt;br /&gt;
在[[美国国家标准协会|ANSI]]的标准确立後，C语言的规范在一段时间内没有大的变动，然而C++在自己的标准化建立过程中继续发展壮大。《标准修正案一》在1994年为C语言建立了一个新标准，但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过，这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。&lt;br /&gt;
&lt;br /&gt;
==設計==&lt;br /&gt;
在C99中包括的特性有：&lt;br /&gt;
* 增加了对编译器的限制，比如源始碼每行要求至少支持到 4095 字节，变量名函数名的要求支持到 63 字节（extern 要求支持到 31）。&lt;br /&gt;
* 增强了预处理功能。例如：&lt;br /&gt;
** [[巨集]]支持取可变参数 &amp;lt;code&amp;gt;#define Macro(...) __VA_ARGS__&amp;lt;/code&amp;gt;&lt;br /&gt;
** 使用[[巨集]]的时候，允许省略参数，被省略的参数会被扩展成空串。&lt;br /&gt;
** 支持&amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;开头的单行注释（这个特性实际上在C89的很多编译器上已经被支持了）&lt;br /&gt;
* 增加了新关键字&amp;lt;code&amp;gt;restrict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_Complex&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_Imaginary&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_Bool&amp;lt;/code&amp;gt;&lt;br /&gt;
** 支持&amp;lt;code&amp;gt;long long&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;long double _Complex&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;float _Complex&amp;lt;/code&amp;gt; 等类型&lt;br /&gt;
* 支持不定长的数组，即数组长度可以在运行时决定，比如利用变量作为数组长度。声明时使用 &amp;lt;code&amp;gt;int a[var]&amp;lt;/code&amp;gt; 的形式。不过考虑到效率和实现，不定长数组不能用在全局，或 &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt; 。&lt;br /&gt;
* [[变量 (程序设计)|变量]]声明不必放在语句块的开头，&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;语句提倡写成&amp;lt;code&amp;gt;for(int i=0;i&amp;lt;100;++i)&amp;lt;/code&amp;gt; 的形式，即&amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;只在&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;语句块内部有效。&lt;br /&gt;
* 允许采用&amp;#039;&amp;#039;type-name&amp;#039;&amp;#039;&amp;lt;tt&amp;gt;{xx,xx,xx}&amp;lt;/tt&amp;gt;这样类似C++的构造函数的形式构造匿名的结构体，即[[复合文字]]特性。&lt;br /&gt;
* 初始化结构体的时候允许对特定的元素赋值，形式为：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;struct test{int a[3]，b;} foo[] = { [0].a = {1}, [1].a = 2 };&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;struct test{int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5 }; // 3,4 是对 .c,.d 赋值的&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 格式化字符串中，利用 &amp;lt;code&amp;gt;\u&amp;lt;/code&amp;gt; 支持 unicode 的字符。&lt;br /&gt;
* 支持 16 进制的浮点数的描述。&lt;br /&gt;
* &amp;lt;code&amp;gt;printf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scanf&amp;lt;/code&amp;gt; 的格式化串增加了对 &amp;lt;code&amp;gt;long long int&amp;lt;/code&amp;gt; 类型的支持。&lt;br /&gt;
* 浮点数的内部数据描述支持了新标准，可以使用 #pragma 编译器指令指定。&lt;br /&gt;
* 除了已有的 &amp;lt;code&amp;gt;__LINE__&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;__FILE__&amp;lt;/code&amp;gt; 以外，增加了&amp;lt;code&amp;gt;__func__&amp;lt;/code&amp;gt;得到当前的函数名。&lt;br /&gt;
* 允许编译器化简非常数的表达式。&lt;br /&gt;
* 修改了&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;处理负数时的定义，这样可以给出明确的结果，例如在C89中&amp;lt;tt&amp;gt;-22 / 7 = -3, -22 % 7 = -1&amp;lt;/tt&amp;gt;，也可以&amp;lt;tt&amp;gt;-22 / 7= -4, -22 % 7 = 6&amp;lt;/tt&amp;gt;。 而C99中明确为&amp;lt;tt&amp;gt; -22 / 7 = -3, -22 % 7 = -1&amp;lt;/tt&amp;gt;，只有一种结果。&lt;br /&gt;
* 取消了函数返回类型默认为 &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt; 的规定。&lt;br /&gt;
* 允许在 &amp;lt;tt&amp;gt;struct&amp;lt;/tt&amp;gt; 的最后定义的数组不指定其长度，写做 [](flexible array member)。&lt;br /&gt;
* &amp;lt;tt&amp;gt;const const int i&amp;lt;/tt&amp;gt; 将被当作 &amp;lt;code&amp;gt;const int i&amp;lt;/code&amp;gt; 处理。&lt;br /&gt;
* 增加和修改了一些标准头文件，比如定义 bool 的 &amp;lt;code&amp;gt;&amp;lt;stdbool.h&amp;gt;&amp;lt;/code&amp;gt; ，定义一些标准长度的&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;的&amp;lt;code&amp;gt;&amp;lt;inttypes.h&amp;gt;&amp;lt;/code&amp;gt;，定义复数的&amp;lt;code&amp;gt;&amp;lt;complex.h&amp;gt;&amp;lt;/code&amp;gt;，定义宽字符的&amp;lt;code&amp;gt;&amp;lt;wctype.h&amp;gt;&amp;lt;/code&amp;gt;，类似于泛型的数学函数&amp;lt;code&amp;gt;&amp;lt;tgmath.h&amp;gt;&amp;lt;/code&amp;gt;，浮点数相关的&amp;lt;code&amp;gt;&amp;lt;fenv.h&amp;gt;&amp;lt;/code&amp;gt;。在&amp;lt;code&amp;gt;&amp;lt;stdarg.h&amp;gt;&amp;lt;/code&amp;gt;增加了&amp;lt;code&amp;gt;va_copy&amp;lt;/code&amp;gt;用于复制&amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;的参数。&amp;lt;code&amp;gt;&amp;lt;time.h&amp;gt;&amp;lt;/code&amp;gt;里增加了&amp;lt;code&amp;gt;struct tmx&amp;lt;/code&amp;gt;，对&amp;lt;code&amp;gt;struct tm&amp;lt;/code&amp;gt;做了扩展。&lt;br /&gt;
* 输入输出对宽字符以及长整数等做了相应的支持。&amp;lt;ref&amp;gt;{{Cite web |url =http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:1999 |archive-date =2018-01-27 |archive-url =https://web.archive.org/web/20180127192726/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |dead-url =no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==版本检测==&lt;br /&gt;
标准宏&amp;lt;code&amp;gt;__STDC_VERSION__&amp;lt;/code&amp;gt;被定义为值&amp;lt;code&amp;gt;199901L&amp;lt;/code&amp;gt;来指示能够获得C99支持。就像&amp;lt;code&amp;gt;__STDC__&amp;lt;/code&amp;gt;宏用于C90，&amp;lt;code&amp;gt;__STDC_VERSION__&amp;lt;/code&amp;gt;可被用来书写对于C90和C99编译器进行不同编译的代码，下面的例子确保了&amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;在二者情况下都可获得（通过在C90中将其替代为&amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt;来避免连接器错误）：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
#if __STDC_VERSION__ &amp;gt;= 199901L&lt;br /&gt;
  /* &amp;quot;inline&amp;quot; is a keyword */&lt;br /&gt;
#else&lt;br /&gt;
# define inline static&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==实现==&lt;br /&gt;
用于[[x86架构]]的[[GCC]],[[Clang]]和其它一些商业编译器(如[[IAR Systems]],[[Intel C++編譯器|ICC]])现支持C99的全部特性&amp;lt;ref&amp;gt;GCC从3.0版本开始正式支持C99(-std=c99)，详情见&amp;lt;/ref&amp;gt;，而[[微软]]和[[Borland]]支持C99的部分特性&amp;lt;ref&amp;gt;{{cite web |website=[[Ars Technica]] |url=https://arstechnica.com/information-technology/2013/06/c99-acknowledged-at-last-as-microsoft-lays-out-its-path-to-c14/ |title=C99 acknowledged at last as Microsoft lays out its path to C++14 |author=Peter Bright |date=29 June 2013 |accessdate=9 January 2015 |archive-date=2020-07-02 |archive-url=https://web.archive.org/web/20200702224818/https://arstechnica.com/information-technology/2013/06/c99-acknowledged-at-last-as-microsoft-lays-out-its-path-to-c14/ |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
==參考資料==&lt;br /&gt;
{{reflist|2}}&lt;br /&gt;
&lt;br /&gt;
==延伸閱讀==&lt;br /&gt;
* {{cite journal|last=Cheng|first=Harry|title=C99 &amp;amp; Numeric computing|journal=[[Dr. Dobb&amp;#039;s Journal]]|url=http://drdobbs.com/cpp/184404993|date=1 March 2002}}&lt;br /&gt;
* {{cite web|url=http://www.ibm.com/developerworks/library/l-c99.html|title=Open source development using C99|last=Seebach|first=Peter|date=24 March 2004|work=developerWorks|publisher=[[IBM]]|accessdate=2020-07-03|archive-date=2009-01-29|archive-url=https://web.archive.org/web/20090129160209/http://www.ibm.com/developerworks/library/l-c99.html|dead-url=no}}&lt;br /&gt;
* {{cite web |url= http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf |title= Final version of the C99 standard with corrigenda TC1, TC2, and TC3 included, formatted as a draft |accessdate= 2020-07-03 |archive-date= 2018-01-27 |archive-url= https://web.archive.org/web/20180127192726/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |dead-url= no }}&amp;amp;nbsp;{{small|(3.61&amp;amp;nbsp;MB)}}&lt;br /&gt;
* [http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf Rationale for International Standard—Programming Languages—C Revision 5.10]{{Wayback|url=http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |date=20160606072228 }}, April-2003, Rationale for C99&lt;br /&gt;
&lt;br /&gt;
==外部連結==&lt;br /&gt;
* [http://www.open-std.org/jtc1/sc22/wg14/www/newinc9x.htm New things in C9X]{{Wayback|url=http://www.open-std.org/jtc1/sc22/wg14/www/newinc9x.htm |date=20190916084257 }}&lt;br /&gt;
* [http://www.cplusplus.com/articles/iz3hAqkS/ Features of C99]{{Wayback|url=http://www.cplusplus.com/articles/iz3hAqkS/ |date=20200705141326 }}&lt;br /&gt;
&lt;br /&gt;
{{S-start}}&lt;br /&gt;
{{S-bef| before = [[ANSI_C#C89|C89 / C90 / &amp;quot;ANSI C&amp;quot;]]}}&lt;br /&gt;
{{S-ttl| title=[[C語言]]標準}}&lt;br /&gt;
{{S-aft| after = [[C11]]}}&lt;br /&gt;
{{end}}&lt;br /&gt;
&lt;br /&gt;
{{CProLang}}&lt;br /&gt;
&lt;br /&gt;
[[Category:C語言]]&lt;br /&gt;
[[Category:程式語言標準]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Alexwikix</name></author>
	</entry>
</feed>