我想删除/忽略代码块的叮当警告,并找到了如何为此使用 pragamas 的多个示例。例如,如果警告是 unused-variable
您可以使用以下方法禁用它:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
int a;
#pragma clang diagnostic pop
然而问题是我在构建存储库时没有在输出中收到警告,我只知道是哪个叮当检查发出警告......而且我找不到任何其他问题或文档,这是案件。这是我的输出:warning: Use of memory after it is freed [clang-analyzer-cplusplus.NewDelete]
我已经尝试了数百种如何忽略这一点的不同组合,但没有任何效果(使用 // NOLINT
不是一个可行的选择)。在我尝试过的事情中,这里有一些:#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Winline-new-delete"
#pragma clang diagnostic ignored "-Wmost"
#pragma clang diagnostic ignored "-Weverything"
#pragma clang diagnostic ignored "clang-analyzer-cplusplus.NewDelete"
#pragma clang diagnostic ignored "-Wclang-analyzer-cplusplus.NewDelete"
#pragma clang diagnostic ignored "-clang-analyzer-cplusplus.NewDelete"
#pragma clang diagnostic ignored "-W-NewDelete"
#pragma clang diagnostic ignored "-W-new-delete"
// code
#pragma clang diagnostic pop
请注意,“修复”代码也不是一种选择,因为它是第三方代码。
最佳答案
正如评论中提到的 #pragma clang diagnostic
方法只能用来压制编译器警告。您提到的警告来自 clang-static-analyzer,它现在是 clang-tidy 的一部分。
通过代码禁用特定 clang-tidy 检查的唯一两个选项是 //NOLINT
和 //NOLINTNEXTLINE
宏。
正如您提到的,有问题的代码是第三方的,我假设您根本没有兴趣分析它。由于您使用的是 CMake,这很容易通过 .clang-tidy
完成。文件。您可以放置一个 .clang-tidy
项目根目录中的文件,并在那里列出/配置所需的检查,如下所示:
Checks: '-*,cppcoreguidelines-*'
(这将启用所有 Cpp 核心指南检查)。然后在放置第三方代码的目录中,您可以通过
.clang-tidy
禁用 clang-tidy 分析。文件放在那个目录下。如 .clang-tidy
文件不能为空或不指定任何检查,您可以通过“错误配置”这样的检查来做到这一点:Checks: '-*,misc-definitions-in-headers'
CheckOptions:
- { key: HeaderFileExtensions, value: "x" }
有关此方法的更多详细信息,请参阅 this answer .或者,您可以使用
.clang-tidy
第三方目录中的文件以仅禁用某些检查。
关于c++ - 使用 #pragma 删除基于 clang 检查的 clang 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68116417/