当我要求查看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。
这在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=gnu11
,as 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将违反语言的行为视为致命错误。
标准的简要记录:
__STDC_VERSION__
和__STDC_LIB_EXT1__
的定义。ANSI没有发布自己的版本的1999或2011标准,而是采用了ISO标准。
[N1256是C99标准的免费提供的草案,其中已合并3个技术勘误。]]
N1570是C11标准的免费提供的草案。它与已发布的C11标准之间存在一些细微的差异,另外还有一份技术勘误。有关更多详细信息,请参见my answer至this question。
来自gcc6 info gcc
和gcc5 https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Standards.html#Standards的有用信息
最小测试程序
第一行将提供您的GCC版本(4.7.2)
需要注意的是,gcc的-std =选项不能用于将编译器“沙盒化”为不支持更高版本的标准C的构造。无论是否有-pedantic
,这都是正确的>
如果尝试使用某些C99代码构造进行编译,则不能依赖gcc -std=c89 -pedantic
来给您错误或警告。在某些情况下会,在其他情况下不会。例如,即使没有在C99之前添加,它也会很高兴地在printf()调用中编译使用%zu
格式说明符的代码。
默认gcc命令是ISO C90的GNU方言(包括某些C99功能)。这是C代码的默认设置。