簡體   English   中英

使warn_unused_result應用於GCC的所有功能

[英]Make warn_unused_result applied to all function with GCC

是否可以告訴GCC對所有功能都使用warn_unused_result標志,即使沒有相應的屬性也可以嗎? 因為如果我忘了檢查返回值,也可以忘了添加GCC特定的屬性。

我已經看到其他一些編譯器是可能的。

不,您只能使用-Wno-unused-result告訴gcc忽略所有warn_unused_result標志,但是相應的-Wunused-result僅設置默認值(僅對標志發出警告)。 如果可以激活-Wall -Wextra -pedantic編譯, -Wall -Wextra -pedantic應該觸發警告,但不能激活,因此不能觸發。

除此之外,我想知道為什么您要這么做,忽略函數的結果並不少見,並且所有庫都可能產生大量警告。

盡管使用GCC似乎無法實現,但您可以運行靜態分析器(例如Coverity和Lint)來捕獲它們。

elfs-clang-plugins (由我自己創建,開源)中有一個clang插件可以提供幫助。

盡管不適用於GCC,但它仍然很有用,例如,您可以將其添加到CI Gatekeeper流程中(如果有的話),或者只是偶爾手動運行一次。

warn_unused_result插件將針對缺少warn_unused_result屬性的功能發出警告 該插件僅考慮在當前編譯單元中聲明或定義的函數,因此外部庫不會增加噪音。

該插件接受可選的arg --static-only,這將使其僅針對靜態函數發出警告(因為更改外部API會花費很多時間)。

例:

int foo(void);

編譯器輸出:

/tmp/test.c:1:5: warning: missing attribute warn_unused_result
int foo(void);

使用objc時,您可以像這樣抑制warn_unused_result警告,

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-result"
    [YPKWhatsNewContainerViewModel checkWhatsNew]; // return value should be ignored
#pragma clang diagnostic pop

暫無
暫無

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

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