Gcc 是否兼容使用-ansi和-std=c++;g+的0x标志+;同时

Gcc 是否兼容使用-ansi和-std=c++;g+的0x标志+;同时,gcc,c++11,g++,c++98,Gcc,C++11,G++,C++98,我发现在我们的一个项目中,我们使用了如下编译命令: g++ -ansi -std=c++0x ... 同时使用两个标志-ansi和-std=c++0x是否正确 我读过gcc的man,看起来我们只能选择一个标志。你怎么看?如果你使用-std=c++0x(从gcc 4.7开始变成-std=c++11),使用-ansi是多余的。另请参见这些选项是互斥的,因为它们都设置了编译器应用于编译的语言的标准(或方言)。引述: 在C模式下,这相当于-std=c90。在C++模式下,它等同于 -STD= C++

我发现在我们的一个项目中,我们使用了如下编译命令:

g++ -ansi -std=c++0x ...
同时使用两个标志
-ansi
-std=c++0x
是否正确


我读过gcc的man,看起来我们只能选择一个标志。你怎么看?

如果你使用
-std=c++0x
(从gcc 4.7开始变成
-std=c++11
),使用
-ansi
是多余的。另请参见

这些选项是互斥的,因为它们都设置了编译器应用于编译的语言的标准(或方言)。引述:

在C模式下,这相当于
-std=c90
。在C++模式下,它等同于<代码> -STD= C++ 98 .< 所以你基本上是这样做的:

gcc -std=c++98 -std=c++0x ...
<> P>我相信以后的选项会在GCC命令行上胜过前面的选项,所以在C++ C++模式下编译的净效果。 GCC实现了C++98的大部分(导出是一个显著的例外)和C++03中的大部分更改。要在GCC中选择此标准,请使用选项之一-ansi、-std=c++98或-std=c++03

如果我理解正确,
-ansi
-std=c++98
-std=c++03
可以互换使用。具体来说,同时使用
-ansi
-std=c++11
是没有意义的

-ansi 在C模式下,这相当于-std=c90。在C++模式下,它相当于-STD= C++ 98。 所以,这是

g++ -ansi -std=c++0x ...
相当于

g++ -std=c++98 -std=c++0x ...
当你用

g++ -ansi -std=c++0x ...
我认为,这相当于根本不指定
-ansi
,因为命令行解析通常为给定参数使用最后一个参数。不过,这只是猜测。但我用一个简单的程序进行了测试:

#include<iostream>

constexpr int value() {return 42;}

int main(void)
{
std::cout<<value()<<std::endl;
}


但在以下两方面都失败了:

g++ -ansi -std=c++11 test.cpp
g++ -ansi -std=c++11 -ansi test.cpp

给出错误:

 error: ‘constexpr’ does not name a type
 note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11

这表明,无论指定为最后一个
-std
的是什么,它都是唯一有效的,您也可以删除
-ansi

好吧,如果您这样做会发生什么?@filmor,什么都没有)我的意思是,我们得到的编译日志没有任何问题,而且二进制文件也工作得很好。但唯一的一个事实是,我们使用这两种国旗对我来说似乎很奇怪。我也这么认为。你认为这是不好的做法,我应该删除
-ansi
选项吗?@zubactik是的,我认为你应该删除它,它只会增加混乱。
g++ -ansi -std=c++11 -ansi test.cpp
g++ -ansi -std=c++11 -std=c++98 t.cpp
 error: ‘constexpr’ does not name a type
 note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11