使用 GCC 将 warn_unused_result 应用于所有函数

问题描述 投票:0回答:4

是否可以告诉 GCC 对所有函数使用 warn_unused_result 标志,即使没有相应的属性?因为如果我忘记检查返回值,我也可能忘记添加 GCC 特定属性。

我发现其他一些编译器也可以实现这一点。

c gcc compiler-warnings
4个回答
4
投票

不,您只能告诉 gcc 使用

warn_unused_result
忽略所有
-Wno-unused-result
标志,但相应的
-Wunused-result
仅设置默认值(仅在标志上发出警告)。如果可以激活,使用
-Wall -Wextra -pedantic
编译应该会触发警告,但它没有,所以它不能。

除此之外,我想知道为什么你会想要这个,忽略函数的结果并不罕见,并且所有库都可能会产生大量警告。


0
投票

虽然 GCC 似乎不可能,但您可以运行 coverity 和 lint 等静态分析器来捕获这些。


0
投票

elfs-clang-plugins(由我自己编写,开源)中有一个 clang 插件可以提供帮助。

虽然不适用于 GCC,但它仍然有用,例如如果您可以将其添加到 CI 看门流程中(如果有的话),或者只是偶尔手动运行一次。

warn_unused_result 插件将对缺少 warn_unused_result 属性的函数发出警告。 该插件仅考虑当前编译单元中声明或定义的函数,因此外部库不会添加噪音。

该插件接受可选参数 --static-only,这会导致它仅对静态函数发出警告(因为更改外部 API 的工作量太大)。

示例:

int foo(void);

编译器输出:

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

0
投票
使用 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
    
© www.soinside.com 2019 - 2024. All rights reserved.