Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找出默认情况下我的gcc使用的ANSI C标准?_C_Gcc - Fatal编程技术网

如何找出默认情况下我的gcc使用的ANSI C标准?

如何找出默认情况下我的gcc使用的ANSI C标准?,c,gcc,C,Gcc,我读到它是带有扩展的C90。我如何确定呢?使用-std=标志指定语言方言:c89、c99、c++98,等等。请注意c90等同于c89 作为速记 -ANSI >在C++模式下,在C模式和 > STD= C++98 C++中,导致代码> -STD= C89 使用-pedantic启用标准要求的所有诊断 C++默认值为 GNU89 >代码> GNU+98 。有关各种方言的详细说明,请参阅手册。阅读手册。在我的计算机上(OSX 10.7,gcc版本4.2.1(基于Apple Inc.build 5

我读到它是带有扩展的C90。我如何确定呢?

使用
-std=
标志指定语言方言:
c89
c99
c++98
,等等。请注意
c90
等同于
c89

作为速记<代码> -ANSI >在C++模式下,在C模式和 > STD= C++98 C++中,导致代码> -STD= C89<代码> 使用

-pedantic
启用标准要求的所有诊断


<> C++默认值为<代码> GNU89<代码> >代码> GNU+98 。有关各种方言的详细说明,请参阅手册。

阅读手册。在我的计算机上(OSX 10.7,gcc版本4.2.1(基于Apple Inc.build 5658)(LLVM build 2335.15.00)):

-标准=
确定语言标准。当前仅支持此选项
编译C或C++时,

必须提供此选项的值;可能的值是

gnu89
默认情况下,ISO C90加GNU扩展(包括一些C99功能)

gnu++98
与-std=c++98加GNU扩展相同。这是C++代码的默认值。
您还可以检查其中一个,例如您的GCC在默认情况下是否要求ANSI C(STRICT\u ANSI)(即,不带任何cli参数)。

尝试下面的命令并搜索
std

gcc -v --help | less

它将显示gcc的所有可用选项。

默认情况下,没有任何gcc版本完全符合任何ANSI或ISO C标准。默认值始终相当于
-std=gnuNN
,支持具有特定于GNU的扩展的给定标准。在版本5之前(追溯到若干年前),默认值是
-std=gnu90
。从版本5开始,默认值为
-std=gnu11

有三个ISO C标准:C90、C99和C11。(C95是C90的一个小修改。)第一个ANSI C标准于1989年发布,被称为C89;它描述了与ISO C90标准相同的语言

要查找正在运行的gcc的默认语言版本,请键入

 info gcc
搜索短语“默认值”

这假设您已经安装了gcc文档,由
info gcc
显示的文档与您正在运行的gcc版本匹配,并且措辞足够相似,搜索“默认值”将找到正确的信息。这些都不能保证。较旧的gcc手册可能会有不同的组织

更可靠的是,运行

gcc --version
要查看您正在运行的版本,请访问页面并阅读您正在运行的版本的文档

更简单地说,如果您有5.0之前的版本,那么默认值是
-std=gnu89
;否则默认值为
-std=gnu11
。(这可能会在未来的版本中发生变化,但只有在新的ISO C标准发布之后,gcc维护人员有时间实施它并决定将其作为默认标准。不要屏住呼吸。)


或者,通过使用
-std=…
命令行选项指定所需的版本,您可以完全避免这个问题。

以下哪一个是默认版本?gcc中是否有一个选项告诉我是否可以看到默认版本?@Bruce:已添加!请注意,C++默认值最终可能会改变:- C++模式和C++模式是什么意思?最近我读到了。这是什么意思?@KerrekSB:如果你知道,请回答我在先前评论中提出的问题。我想知道它,在飞行中,而不是创造一个话题D@Nawaz:这意味着编译器本身将使用g++,而不是gcc进行编译。我认为这意味着编译器的源代码被视为C++。这有意义吗?对我来说,它适用于GCC,但对Clang不适用。嗯,GCC的手册没有。Wat?但默认情况下不使用哪个选项。默认情况下,gcc的任何版本都不完全符合任何ANSI/ISO标准。