即使没有相应的属性,是否可以告诉 GCC 对所有函数使用warn_unused_result标志?因为如果我忘记检查返回值,我也会忘记添加 GCC 特定属性。
我已经看到它可以与其他一些编译器一起使用。
即使没有相应的属性,是否可以告诉 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);
使用 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