【发布时间】:2021-09-07 23:42:15
【问题描述】:
我想删除/忽略一段代码的 clang 警告,并找到了多个关于如何为此使用 pragamas 的示例。例如,如果警告是 unused-variable,您可以使用以下命令禁用它:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
int a;
#pragma clang diagnostic pop
但是问题是我在构建存储库时没有在输出中收到警告,我只知道发出警告的是哪个 clang 检查...而且我找不到任何其他问题或文档就是这样。这是我的输出的样子:
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
注意,“修复”代码也不是一种选择,因为它是第三方代码。
【问题讨论】:
-
附带说明,这是一个危险的警告,即使对于单个变量也要禁用,您确定吗?
-
@Afshin 确定它......但这不是我的代码,我无意更改它......我也从来没有遇到过问题,并且查看源代码似乎无论如何,警告永远不会发生。我是 clang 的新手,但关于实际可能发生的事件似乎并不总是完全合乎逻辑的。
-
你的构建系统是什么?CMake?
-
@Afshin 我正在使用 CMake 和 Ninja
标签: c++ clang clang++ clang-static-analyzer clang-tidy