【问题标题】:how to silence gcc warning against c++17 features?如何消除针对 c++17 功能的 gcc 警告?
【发布时间】:2017-03-15 12:30:30
【问题描述】:

我自建 gcc 7 来尝试一些新的 c++17 功能。

当我构建代码时,我看到了一百行警告,说某些功能只有在 -std=c++1z 时才可用(我已经在构建命令行中指定了 -std=c++1z 并且我尝试过gnu++1z 也是)

我想消除这个警告。使用 clang 4 时,有一个选项 -Wno-c++1z-extensions

但 gcc 无法识别此选项。

【问题讨论】:

  • 你不能用-std=c++1z编译吗?
  • 请注意,如果您的代码使用 c++17 功能,则需要使用 c++17 编译器。显然你通过指定-std=c++1z 来做到这一点。仅仅试图消除“警告”并不是要走的路 - 将一种语言的编译器扔给另一种语言并告诉编译器对其不理解的所有内容闭嘴是个坏主意。
  • @VittorioRomeo 我已经指定 -std=c++1z,警告不会消失
  • @skyking 你是什么意思?我使用了 gcc7,一个 c++17 编译器,并且在构建命令行中我已经指定了 -std=c++1z?警告没有消失?
  • 是手动编译还是使用 makefile/cmake/...?因为这种事情通常结果是编译选项实际上没有到达编译器(CFLAGS 与 CXXFLAGS 等),或者调用的编译器不是预期的(坏的工具链文件,CC 与 CXX,配置不会重新运行,无论如何)。您是否尝试通过具有 C++17 功能的单个 cpp 文件手动调用此编译器并查看它是否仍然给出这些警告?

标签: c++ gcc c++17


【解决方案1】:

我的问题是由 root 引起的。

这是因为我用 cmake 设置了 -std=c++17。我也包括了Qt5。 Qt5 设置覆盖了我的 -std=c++17。使用 make VERBOSE=1,我可以同时看到 -std=c++17 和 -std=c++14。

这会让编译器感到困惑。

问题与https://gitlab.kitware.com/cmake/cmake/issues/16468有关

【讨论】:

  • 遇到了同样的问题,只是想补充一下,当您使用不同的值指定两次 -std 标志时通常会发生这种情况,而不仅仅是与 QT 相关。我猜它正在解析两个值中的较小值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2021-09-24
  • 1970-01-01
  • 2015-09-22
  • 2014-01-18
相关资源
最近更新 更多