【问题标题】:Is it compatible to use -ansi and -std=c++0x flags for g++ simultaneously同时为 g++ 使用 -ansi 和 -std=c++0x 标志是否兼容
【发布时间】:2014-10-15 07:19:32
【问题描述】:

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

g++ -ansi -std=c++0x ...

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

我为 gcc 阅读了 man ,看起来我们只需要选择一个标志。你怎么看?

【问题讨论】:

  • 那么,如果你这样做会怎样?
  • @filmor , Nothing) 我的意思是我们得到编译日志没有任何问题,二进制文件也工作得很好。但我们使用这两个标志的唯一事实对我来说看起来很奇怪。

标签: gcc c++11 g++ c++98


【解决方案1】:

GCC 文档说

-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,因为命令行解析通常采用给定参数的 last 参数。不过,这只是猜测。但是我用一个简单的程序进行了测试:

#include<iostream>

constexpr int value() {return 42;}

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

该程序无法在 C++98 中编译,因为 constexpr 是在 C++11 中引入的。但是两者都可以正常编译:

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

g++ -ansi -std=c++98 -std=c++11 t.cpp

但两者都失败了:

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

这表明任何指定为last-std 都只是一个有效的,您不妨删除-ansi

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      -ansi
      

      在 C 模式下,这相当于 -std=c90。在C++模式下,相当于-std=c++98

      所以你基本上是这样做的:

      gcc -std=c++98 -std=c++0x ...
      

      我相信在 GCC 命令行上后面的选项胜过早期的选项,所以最终的效果是在 C++0x 模式下编译。

      【讨论】:

      • 我也这么认为。你认为这是不好的做法,我应该删除-ansi 选项吗?
      • @zubactik 是的,我认为你应该删除它,它只会增加混乱。
      【解决方案4】:

      来自GCC: standards/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 是没有意义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        相关资源
        最近更新 更多