![](/img/trans.png)
[英]Declared with attribute warn_unused_result [-Wunused-result]
[英]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.