可以找到Xcode构建设置 - GCC_WARN有效__CPLUSPLUS违规行为

时间:2015-03-25 10:28:07

标签: c++ xcode xcode6 clang++

我使用Xcode 6.2构建C ++命令行应用程序。

Xcode构建设置参考说明:

如果您使用C ++开发产品,则可能需要在目标中自定义这些构建设置:

GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS(有效C ++违规)

但是,此选项不会显示在我的任何目标的构建设置列表中。

谁能告诉我它在哪里?

1 个答案:

答案 0 :(得分:2)

有问题的设置不再有任何效果 - 如果将其放入pbxproj文件中,它将显示为用户界面中的用户定义设置。

该设置仅适用于gnu g++编译器,xcode不再附带该编译器(它附带clang++g++包装器调用{{1 }})。对clang++触发的某些条件的简要测试不会触发g++,例如:

clang++

有观点认为它太嘈杂而无用 - 例如关于不初始化#include <string> using std::string; class foo { string x; int y; void *ptr; public: foo() : y(1), ptr(0) {} }; $ g++-4.9 -c -Weffc++ evil.cpp evil.cpp:5:7: warning: 'class foo' has pointer data members [-Weffc++] class foo { ^ evil.cpp:5:7: warning: but does not override 'foo(const foo&)' [-Weffc++] evil.cpp:5:7: warning: or 'operator=(const foo&)' [-Weffc++] evil.cpp: In constructor 'foo::foo()': evil.cpp:11:5: warning: 'foo::x' should be initialized in the member initialization list [-Weffc++] foo() : y(1), ptr(0) {} ^ $ clang++ -c -Weffc++ evil.cpp $ (一个x)的投诉在这种情况下是毫无意义的警告,因此比它的价值更麻烦。

您可以手动将std::string选项添加到C ++代码的编译标志中,您可以将其添加到-Weffc++下的选项Other C++ Flags(XY取决于您的版本) (XCode),但基于LLVM的编译器也不会处理该选项。

  

看起来这个选项的文档已经过时了 - 我已经记录了一个雷达,可以从文档中删除选项以防止这种混淆。