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

How to use clang++ with -std=c++11 -Weverything -Werror

本文关键字:c++11 everything -Werror -std 何使用 clang++      更新时间:2023-10-16

我想编译以下文件(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: error:默认函数定义与c++98不兼容[-Werror,- wc++ 98-compat]

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

实际上,您可能不需要所有的警告,因为许多警告可能被认为是风格上的或主观的,而其他警告(例如您遇到的警告)在您的情况下只是愚蠢的。

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

  • 发现:否则很难获得所有可用警告的列表
  • 黑名单替代方案:使用gcc,您可以选择希望应用的警告(白名单),使用-Weverything,您可以选择不希望应用的警告;优点是,当切换到编译器的新版本时,您更有可能从新的警告
  • 中受益。

显然,发现并不真正兼容生产使用;因此,您似乎属于黑名单的情况。

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

因此,对于黑名单,您得到:
-Weverything -Wno-c++98-compat -Wno-...

并且鼓励您不时地修改黑名单警告列表(例如,当您升级到较新的编译器时)。