【问题标题】:G++ Compiler warning when using c++ 17 updates使用 c++ 17 更新时的 G++ 编译器警告
【发布时间】:2020-08-07 10:32:57
【问题描述】:

我正在使用 mingw 在 Windows 10 上运行 g++ 编译器。 在 cmd 检查编译器版本时,我得到以下信息:

g++ --version- g++ (MinGW.org GCC Build-2) 9.2.0

c++ --version相同

当我编译一个使用结构化绑定的 cpp 程序时,我收到了一个警告:

warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'

但除此之外,代码运行良好。 每个人都收到此警告还是我运行的是较低版本的编译器?

我正在使用扩展程序 - 竞争性编程助手,此警告会中断进程。 因此,如果每个人都收到此警告,有没有办法我可以只阻止特定于版本的警告而不必阻止所有编译器警告。

TIA。

【问题讨论】:

  • 编译器选择与 C++17 不同的默认标准。因此,您必须手动将-std=c++17 作为命令行标志传递(或相应地配置您的构建)。请参阅this thread,了解如何了解默认情况下的实际标准。

标签: c++ c++17


【解决方案1】:

正如警告本身所说:
结构化绑定仅适用于“-std=c++17”或“-std=gnu++17”。
这意味着,您正在使用 cpp 版本 14 或更低版本作为编译器。但是,您的系统上还安装了 cpp 17 或更高版本才能收到此类警告。
您的程序仍会运行,但会出现警告。
对于 Windows
如果您使用的是 VS 代码(假设您已经在使用代码运行器),那么,

  1. 打开 VS 代码的设置(UI) (Ctrl + ,)
  2. 搜索 Code-runner: Executor Map
  3. 点击在settings.json中编辑
  4. 会出现这样的东西:
  5. 在 cpp 部分:将其更改为 "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",如上图所示。

现在终于完成了。

以下步骤适用于 linux。

  1. 在终端中使用命令 sudo gedit ~/.bashrc 打开 .bashrc 文件。
  2. 在 .bashrc 文件中,在文件末尾添加
    alias g++="g++ --std=c++2a"
    这将始终以 cpp+20 版本编译您的文件。

一旦完成,您将不会收到任何警告。
注意: 不强制使用 cpp+20。您可以使用任何您喜欢的版本。
根据本网站更改版本
https://www.learncpp.com/cpp-tutorial/configuring-your-compiler-choosing-a-language-standard/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多