4

Clang-tidy 的cppcoreguidelines-pro-type-union-access规则本质上是对工会的完全禁止,它标记了对工会成员的所有访问权限。

我的库有一个外部“C”接口,其结构包含一个联合。我不能在头文件中使用应该可以从 C 而不仅仅是 C++ 中使用的变体。

显然,在我使用联合的地方使用 NOLINT 向代码发送垃圾邮件并不是一个好主意。

除了禁用此检查之外,还有其他解决方法吗?

4

1 回答 1

0

这取决于您对联合的使用,尤其是您的问题中提到的联合使用在您的代码中的分散程度。如果你到处使用它,除了禁用检查之外你无能为力。

如果它被限制在几个特定的​​地方,您可以使用该-line-filter选项来过滤掉使用它的文件(甚至行)。棘手的部分是-line-filter过滤行IN

这会过滤掉所有警告unions.cpp(假设它的行数少于 9999999):

-line-filter=[{"name":"unions.cpp","lines":[[9999999,9999999]]},{"name":".h"},{"name":".cpp"}]

{"name":".h"},{"name":".cpp"}过滤其余文件,否则您将看不到任何警告。

或者,如果您只想从以下内容中过滤掉一些行unions.cpp

-line-filter=[{"name":"unions.cpp","lines":[[1,10],[12,100]]}},{"name":".h"},{"name":".cpp"}]

在此示例中将跳过第 11 行。

显然,这会过滤掉来自该文件(或行)的所有检查的警告,因此您可能希望单独运行该检查。

于 2019-07-26T06:40:40.003 回答