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

Koc*_*cka 16 c++ compilation clang compiler-warnings c++11

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

#include <iostream> 

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

int main(){
  std::cout << "Works!" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令: 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兼容标志?

Mat*_* M. 31

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

-Weverything 最初建立有两个原因:

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

显然,发现与生产使用并不完全兼容; 因此,你似乎陷入黑名单案件中.

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

因此,对于黑名单,您将获得:

-Weverything -Wno-c++98-compat -Wno-...
Run Code Online (Sandbox Code Playgroud)

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

  • 还有 -Wno-c++98-compat-pedantic,假设你足够幸运能够使用 GCC_WARN_PEDANTIC = YES。 (2认同)