当前GCC的默认C -std标准版本是什么

问题描述 投票:56回答:6

当我要求查看cc的当前版本时,我得到了。

$ cc --version
cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ 

我想知道使用的是c89,c90,c99或c11。

c ubuntu gcc c99 c11
6个回答
70
投票

这在gcc手册中有详细解释,可通过键入info gcc或在线here获得(如果已安装)。 4.7.2手册的相关部分为here

默认情况下,gcc不符合任何ANSI / ISO C标准。当前默认值等效于-std=gnu90,它是1989/1990标准,具有特定于GNU的扩展名。 (未发布语言标准要求的某些诊断。)2015年4月22日发布的5.1.0版将默认设置从-std=gnu90更改为-std=gnu11as documented here

如果需要标准一致性,则可以使用以下任何一种:

-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-std=iso9899:1999(在标准发布之前使用名称c9x)。 C99支持为not quite complete,但已经关闭。

-std=c11也可以拼写为-std=c0x-std=iso9899:2011(在发布最终标准之前使用名称c0x;错误地认为x不会超过9)。 C11支持也不完整;当前状态为summarized here

-pedantic选项使gcc打印必需的诊断,以检查是否违反约束和语法规则。在某些情况下,这些诊断仅是警告-并没有容易的方法来区分这些警告和该语言不需要的其他警告。将-pedantic替换为-pedantic-errors,以使gcc将违反语言的行为视为致命错误。

标准的简要记录:

  • C89是第一个正式的C标准,由ANSI于1989年发布。
  • C90是标准的ISO版本,描述的语言与C89完全相同。 ANSI正式采用了该标准的ISO版本。有两个技术勘误,更正了一些错误。
  • C95是对C90的修正,增加了一些功能,主要是有向字母和广泛的字符支持。据我所知,从未发布过合并版本。
  • C99由ISO在1999年发布。共有三个技术勘误。
  • C11由ISO于2011年发布。存在一项技术勘误,确定了__STDC_VERSION____STDC_LIB_EXT1__的定义。

ANSI没有发布自己的版本的1999或2011标准,而是采用了ISO标准。

[N1256是C99标准的免费提供的草案,其中已合并3个技术勘误。]]

N1570是C11标准的免费提供的草案。它与已发布的C11标准之间存在一些细微的差异,另外还有一份技术勘误。有关更多详细信息,请参见my answerthis question


19
投票

11
投票

最小测试程序


3
投票

第一行将提供您的GCC版本(4.7.2)


0
投票

需要注意的是,gcc的-std =选项不能用于将编译器“沙盒化”为不支持更高版本的标准C的构造。无论是否有-pedantic,这都是正确的>

如果尝试使用某些C99代码构造进行编译,则不能依赖gcc -std=c89 -pedantic来给您错误或警告。在某些情况下会,在其他情况下不会。例如,即使没有在C99之前添加,它也会很高兴地在printf()调用中编译使用%zu格式说明符的代码。


-2
投票

默认gcc命令是ISO C90的GNU方言(包括某些C99功能)。这是C代码的默认设置。

© www.soinside.com 2019 - 2024. All rights reserved.