如何在Ubuntu 12.10中隐藏g++ C++11编译警告

3
当我执行以下操作时:
g++ main.cpp 

I get the output

main.cpp:9:17: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:10:15: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:11:16: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:12:14: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:13:13: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]

现在,如果我运行:

g++ -std=c++11 main.cpp

这些警告信息已经消失,但我不想再显式地指定已启用的内容。我不愿意创建一个简单的bash别名,因为如果我没记错的话gcc已经是某种别名了。是否仍然安全这样做,或者有没有在配置文件中正确修复它的方法?我在运行 Ubuntu 12.10 x64,使用默认的软件源。


3
你可以编写符合C++03标准的代码。 - Kerrek SB
你的问题是什么?如何编写能在非C++11编译器中编译的C++11代码?什么意思? - Lightness Races in Orbit
6个回答

3
“我希望不必显式指定已启用的内容” - 实际上,这几乎肯定是最省力的方法。虽然还有许多其他可能性,比如通过grep -v 管道输出、重新编码和重新编译编译器工具链,但它们大多数情况下都比在命令行中添加该标志更加困难。
如果您担心额外字符和可能的别名冲突,您可以随时将别名命名为g11或类似的名称。然后,您只需记住使用正确的名称,但任何有脊柱动物都足够先进,可以处理这个问题:-)

1
你是在说无脊椎动物不能记住命令行参数吗?这太荒谬了 :) - Maurício Linhares

2
GCC编译器家族(gcc,g ++等)接受 -w 开关,可禁用所有警告 - 但您不想这样做。请勿使用该开关。

1

使用别名确实是一种安全的方式。出于同样的原因,我将以下内容添加到我的.bashrc文件中,它运行得非常完美。

alias g++='g++ -std=c++11'

0
如果你像写代码一样写代码(为什么不呢,我们都期待C++11),那么你现在需要添加标志。你可以在make文件中这样做,或者你可以在两行代码中像这样做:/usr/local/bin/g++
#!/bin/bash
/usr/bin/g++ -std=c++11 "$@"

这样做虽然方便,但你的代码可能会变得不可移植。这是一种权衡。

如果路径中早期出现的二进制文件优先级高于默认的g++二进制文件,则会调用它来编译代码。


0
在您选择的构建系统或IDE中指定-std=c+11。您可以在这里了解各种构建系统。

0

这是 GCC 特定的,你必须明确地告诉它很多东西。如果你使用某个集成开发环境(IDE),只需进入项目选项并在那里指定 -std=c++11。否则最好编写符合 C++03 标准的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接