2.1 C语言
原ANSI C标准(X3.159-1989)于1989年获得批准,并
1990年出版本标准被批准为ISO标准
(ISO/IEC 9899:1990)1990年晚些时候没有技术上的差异
在这些出版物之间,尽管ANSI标准的章节
重新编号并成为ISO标准中的条款美国国家标准协会
标准,但不是ISO标准,也有一个基本原理
文件这两种形式的标准通常称为C89,
或偶尔作为C90,从批准之日起。选择这个
GCC中的标准,使用其中一个选项
-ansi
,
-std=c90
或
-std=iso9899:1990
;要获得标准要求的所有诊断,还应指定
-pedantic
(或
-pedantic-errors
如果
你希望它们是错误而不是警告。参见选项
控制C方言。
1990年ISO C标准中的错误在两项技术上得到了修正
1994年和1996年出版的勘误表GCC不支持
未修正版本。
1995年公布了对1990年标准的修正案。这
修正增加了有向图和
__STDC_VERSION__
对语言来说,但是
与图书馆有关。这个修正案通常被称为
修改后的标准有时称为C94或C95。选择
在GCC中,使用选项
-std=iso9899:199409
(关于
其他标准版本,
-迂腐的
接收所有必需的
诊断)。
iso c标准的新版本于1999年作为iso/iec标准出版。
9899:1999,俗称C99(在开发过程中,草稿
这个标准版本被称为C9X)
基本上完全支持此标准版本;请参见
http://gcc.gnu.org/c99status.html
详细情况。选择这个
标准,使用
-std=c99
或
-std=iso9899:1999
.
1999年iso c标准中的错误在三个技术方面得到了纠正
2001年、2004年和2007年出版的更正GCC不支持
未修正版本。
C标准的第四个版本称为C11,发表于
2011年为ISO/IEC 9899:2011(在开发过程中
标准版本被称为C1X。)GCC基本上
完全支持此标准,启用
-std=c11
或
-std=iso9899:2011
是的。集成了更正的版本称为C17,并支持
-std=c17
或
-std=iso9899:2017
;的
修正也适用于
-标准=C11
,唯一的区别是
选项之间的值是
__STDC_版本__
.
默认情况下,GCC为C语言提供了一些扩展,在
很少与C标准冲突参见C的扩展
语言家族。C99标准的一些特性是
在c90模式下被接受为扩展,一些特性是
c11标准在c90和c99模式下被接受为扩展。使用
的
-std
上面列出的选项禁用这些扩展
与选定的C标准版本冲突。您也可以选择
C语言的扩展版本显式地
-std=gnu90
(用于C90
有GNU扩展)
-std=gnu99
(对于带GNU扩展的C99)或
-std=gnu11
(用于带GNU扩展的C11)。
如果没有给出C语言方言选项,则默认为
-标准=gnu11
.
ISO C标准(第4条)定义了两类符合性
实施。一致的托管实现支持
包括所有图书馆设施的标准;符合
独立实现只需要提供
图书馆设施
<float.h>
,
<limits.h>
,
<stdarg.h>
,和
<stddef.h>
;自AMD1以来
<iso646.h>
;从C99开始
那些在
<stdbool.h>
和
<stdint.h>
;从C11开始
<stdalign.h>
和
<stdnoreturn.h>
是的。此外,还添加了复杂类型
C99不是独立实现所必需的。
该标准还为程序定义了两个环境:一个
独立的环境,所有实现都需要
图书馆设施不得超过独立式的要求
实现,其中处理程序的启动和终止
是否定义了实现;以及托管环境
必需,其中提供所有库设备并启动
是通过一个函数
int main (void)
或
int main (int, char *[])
是的。一个
操作系统内核是在独立的
环境;使用操作系统设施的程序是
在托管环境中运行程序的示例。
GCC的目标是作为一个一致的独立的
实现,或作为一致宿主的编译器
实施。默认情况下,它充当托管
实施,定义
__STDC_HOSTED__
假设当
使用iso c函数的名称,它们定义了语义
在标准中使它成为一个一致的独立的
对于独立环境的实现,请使用
-ffreestanding
;然后定义
_主办的STDC__
为0,不假设标准中函数名的含义
图书馆,但下列情况除外要构建操作系统内核,您可以
好吧,还是需要自己安排链接和启动。
请参见控制C方言的选项。
GCC不提供仅托管的
实现,也不是C99所需的所有功能
所有平台上的独立实现使用设施
对于托管环境,您需要在其他地方找到它们(例如,
在GNU C库中)请参见标准库。
gcc使用的大多数编译器支持例程都存在于
但也有一些例外。GCC要求独立
环境提供memcpy、memmove、memset和memcmp最后,如果
__builtin_trap
使用,并且目标不实现陷阱模式,则gcc发出中止调用。
技术勘误、基本原理文件和
有关联机可用的C历史记录的信息,请参见
http://gcc.gnu.org/readings.html