【问题标题】:How to use clang++ with -std=c++11 -Weverything -Werror如何在 -std=c++11 -Weverything -Werror 中使用 clang++
【发布时间】:2012-12-20 08:18:52
【问题描述】:

我要编译以下文件(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 兼容标志吗?

【问题讨论】:

  • -Wno-c++98-compat,不知道有没有通用的方法。
  • @Mat 你能把这个作为回答发帖,这样我就可以接受了。
  • Weverything 启用所有警告,它与 C++98 无关,尝试-Wall 和/或-Wextra
  • 我不知道这是否足以满足您的要求。
  • 我想要所有不针对 c++11 的警告。所以我想要Weverything。只使用墙不是一种选择。

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


【解决方案1】:

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

-Weverything 最初构建的原因有两个:

  • 发现:否则很难获得所有可用警告的列表
  • 黑名单替代方案:使用 gcc,您可以选择您希望应用的警告(白名单),-Weverything 您可以选择您不想应用的警告;这样做的好处是,在迁移到新版本的编译器时,您更有可能从新警告中受益

显然,发现与生产用途并不真正兼容;因此,您似乎陷入了黑名单的情况。

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

因此,对于黑名单,您会得到:

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

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

【讨论】:

  • 还有 -Wno-c++98-compat-pedantic,假设你有幸能够使用 GCC_WARN_PEDANTIC = YES。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 2013-07-05
  • 2013-07-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多