為什麼變量未使用
有很多原因導致未使用變量可能保留在代碼庫中。這些包括:
:未使用變量的最明顯原因是有缺陷的代碼。要么根本不需要該變量,因此可以刪除,或者是必要的,但我們忘記了在某些關鍵點使用它。
重構:變量可能取決於預處理器階段。標準示例是僅出於調試目的而定義的變量。您的代碼可能包含一些表單
如果您使用-dndebug編譯,則編譯器可能會警告您value_for_for_comparison_only從未使用過:的確,assert語句已被…沒有。 如何檢測未使用的變量
如何不檢測未使用的變量:屬性
雖然我們始終應啟用盡可能多的警告,但在某些情況下,我們需要選擇性地關閉有關特定未使用變量的警告。這樣做的一種流行的方式是使其無效:對象Unused_Object;
(void)unused_object;
void的演員陣容將變量的用法計數為(pro forma),因此不會發出任何警告。
雖然刪除了Unused_object未使用的警告,但如有預期,有一些改進的方法。我們希望具有明確的語義,以表示無用的對象。一種常見的方法是通過定義宏:
const auto value = compute_some_value(); const auto value_for_comparison_only = compute_same_value_differently(); assert( value == value_for_comparison_only );一個優點是,我們現在明確地傳達了此變量的意圖(或缺乏意圖)。此外,如果我們決定清除未使用變量的代碼,那麼搜索它們要容易得多。
超越宏,我們有可變屬性:語言c的本地或作為C/C編譯器提供的語言擴展。例如,clang和GCC允許變量屬性__Attribute __(((未使用))。 C 17支持[[MASE_UNUSED]]屬性:
這些屬性與編譯器(以及我們)交流這些變量可能未使用,並且我們對此很好。
歷史上,海灣合作委員會屬性首先出現,是C和C中的編譯器特定語言擴展。從C 17開始,屬性是語言標準的一部分。但是,不僅拼寫不同,而且標準和GCC擴展不同意將屬性放置在哪裡。
[[MASE_UNUSED]]屬性將通過條件編譯找到其大多數應用程序。例如,它是僅調試變量的自然屬性。出於純粹的美學原因,我個人更喜歡定義一個宏#define and_unused [[bays_unused]]。__attribute __(((未使用))的優點是,如果代碼中使用該變量,它實際上會警告您。它不是
,但
保留無用的東西
Object unused_object; (void)unused_object;從比較中,評論未使用的變量是一個很好的策略?並非總是!在整個開發代碼和調試階段中,您會保留未使用的變量的原因。假設該變量是在過去版本的代碼中使用的,也許您甚至還沒有決定是否應該擱置或重新整合舊代碼;含義:您不知道您是否可能再次需要未使用的變量。
可能有助於調試目的保留代碼:
const auto value = compute_some_value(); const auto value_for_comparison_only = compute_same_value_differently(); assert( value == value_for_comparison_only );即使從未使用複雜的計算結果,將其圍繞它構成了另一個失敗點……這正是您在調試期間想要的。即使不是原本打算調試的目的,如果您決定再次需要它,則該程序初始化此變量也會有所幫助。
我希望這篇關於未使用變量的文章對您有用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3