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