Clang-tidy 的cppcoreguidelines-pro-type-union-access规则本质上是对工会的完全禁止,它标记了对工会成员的所有访问权限。
我的库有一个外部“C”接口,其结构包含一个联合。我不能在头文件中使用应该可以从 C 而不仅仅是 C++ 中使用的变体。
显然,在我使用联合的地方使用 NOLINT 向代码发送垃圾邮件并不是一个好主意。
除了禁用此检查之外,还有其他解决方法吗?
Clang-tidy 的cppcoreguidelines-pro-type-union-access规则本质上是对工会的完全禁止,它标记了对工会成员的所有访问权限。
我的库有一个外部“C”接口,其结构包含一个联合。我不能在头文件中使用应该可以从 C 而不仅仅是 C++ 中使用的变体。
显然,在我使用联合的地方使用 NOLINT 向代码发送垃圾邮件并不是一个好主意。
除了禁用此检查之外,还有其他解决方法吗?
这取决于您对联合的使用,尤其是您的问题中提到的联合使用在您的代码中的分散程度。如果你到处使用它,除了禁用检查之外你无能为力。
如果它被限制在几个特定的地方,您可以使用该-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 行。
显然,这会过滤掉来自该文件(或行)的所有检查的警告,因此您可能希望单独运行该检查。