簡體   English   中英

如何在沒有清晰警告的情況下使用工會?

[英]How can I use unions without clang-tidy warnings?

Clang-tidy 的cppcoreguidelines-pro-type-union-access規則本質上是完全禁止工會,它標記了對工會成員的所有訪問。

我的圖書館有一個 extern "C" 接口,其結構包含一個聯合。 我不能在應該可以從 C 而不僅僅是 C++ 中使用的頭文件中使用變體。

顯然,在我使用 union 的任何地方使用 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 行。

顯然,這會過濾掉該文件(或行)中所有檢查的警告,因此您可能希望單獨運行該檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM