如何使用clang ++与-std = c ++ 11 -Weverything -Werror

时间:2013-01-06 11:51:20

标签: c++ c++11 compilation clang compiler-warnings

我想编译以下文件(temp.cpp):

#include <iostream> 

class Foo {
public:
  Foo() = default;
};

int main(){
  std::cout << "Works!" << std::endl;
  return 0;
}

使用以下命令:clang++ temp.cpp -o temp -std=c++11 -Weverything -Werror

有一个错误:

  

temp.cpp:5:11:错误:默认函数定义与C ++ 98不兼容[-Werror,-Wc ++ 98-compat]

我知道有一个类似c ++ 98-compat的警告,它是一切的一部分。如何启用除c ++ 98-compat之外的所有警告? -Weverything是否有c ++ 11兼容标志?

1 个答案:

答案 0 :(得分:31)

实际上,你可能不希望所有的警告,因为一些警告可以被认为是风格或主观的,而其他警告(例如你碰到的警告)在你的情况下只是愚蠢。

最初构建

-Weverything有两个原因:

  • 发现:获取所有可用警告的列表非常困难
  • 黑名单替代:使用gcc,你可以选择你想要申请的警告(白名单),-Weverything你挑选那些你不想申请的人;优点是,当转移到新版本的编译器时,您更有可能从新警告中受益

显然,发现与生产使用并不完全兼容;因此,您似乎属于黑名单案例。

Clang诊断系统将输出(默认情况下)负责生成警告的最具体警告组的名称(此处为-Wc++98-compat),并且可以通过添加no-来关闭每个警告组在-W之后。

因此,对于黑名单,你得到:

-Weverything -Wno-c++98-compat -Wno-...

我们鼓励您不时修改列入黑名单的警告(例如,当您升级到新的编译器时)。