这在 gcc 手册中有详细解释,可通过在此处info gcc
键入或在线获取(如果已安装) 。4.7.2 手册的相关部分在这里。
默认情况下,gcc 不符合任何 ANSI/ISO C 标准。当前默认值等同于-std=gnu90
,它是 1989/1990 标准,具有特定于 GNU 的扩展。(未发布语言标准要求的某些诊断。) 2015-04-22 发布的版本 5.1.0 将默认值从 更改-std=gnu90
为-std=gnu11
,如此处所述。
如果您想要标准一致性,您可以使用以下任何一种:
-std=c90 -pedantic
-std=c99 -pedantic
-std=c11 -pedantic
-std=c90
也可以拼写为-ansi
, -std=c89
, 或-std=iso9899:1990
.
-std=iso9899:199409
支持 C90 标准加上 1995 年的修订,增加了一些小功能(所有这些也在 C99 中)。
-std=c99
也可以拼写为-std=c9x
or -std=iso9899:1999
(该名称c9x
在标准发布之前使用)。C99 支持还不是很完整,但已经很接近了。
-std=c11
也可以拼写为-std=c0x
or -std=iso9899:2011
(该名称c0x
在最终标准发布之前使用;错误地认为x
不会超过 9)。C11 支持也不完整;目前的状态总结在这里。
该-pedantic
选项使 gcc 打印违反约束和语法规则所需的诊断信息。在某些情况下,这些诊断只是警告——并且没有简单的方法来区分这些警告和语言不需要的其他警告。替换-pedantic
为-pedantic-errors
使 gcc 将语言冲突视为致命错误。
标准的快速历史:
- C89 是第一个官方 C 标准,由ANSI于 1989 年发布。
- C90 是标准的ISO版本,描述的语言与 C89 完全相同。ANSI 正式采用了 ISO 版本的标准。有两个技术更正,纠正了一些错误。
- C95 是对 C90 的修正,增加了一些特性,主要是二合字母和宽字符支持。据我所知,从未发布过合并版本。
- C99 于 1999 年由 ISO 发布。共有三份技术勘误。
- C11 由 ISO 于 2011 年发布。有一个技术勘误,修正了
__STDC_VERSION__
和的定义__STDC_LIB_EXT1__
。
ANSI 没有发布自己的 1999 或 2011 标准版本,而是采用 ISO 标准。
N1256是 C99 标准的免费草案,其中合并了 3 个技术勘误。
N1570是免费提供的 C11 标准草案。它与已发布的 C11 标准以及一份技术勘误之间存在一些细微差别。有关更多详细信息,请参阅我对此问题的回答。