是否可以告诉 GCC 对所有函数使用 warn_unused_result 标志,即使没有相应的属性?因为如果我忘记检查返回值,我也可能忘记添加 GCC 特定属性。
我发现其他一些编译器也可以实现这一点。
不,您只能告诉 gcc 使用
warn_unused_result
忽略所有 -Wno-unused-result
标志,但相应的 -Wunused-result
仅设置默认值(仅在标志上发出警告)。如果可以激活,使用 -Wall -Wextra -pedantic
编译应该会触发警告,但它没有,所以它不能。
除此之外,我想知道为什么你会想要这个,忽略函数的结果并不罕见,并且所有库都可能会产生大量警告。
虽然 GCC 似乎不可能,但您可以运行 coverity 和 lint 等静态分析器来捕获这些。
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);
warn_unused_result
警告,
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-result"
[YPKWhatsNewContainerViewModel checkWhatsNew]; // return value should be ignored
#pragma clang diagnostic pop