是否有可能告诉GCC对所有功能使用 warn_unused_result 标志,即使没有相应的属性?因为如果我忘记检查返回值,我也可以忘记添加GCC特定属性。
我已经看到它可以和其他一些编译器一起使用。
答案 0 :(得分:1)
不,您只能告诉gcc忽略warn_unused_result
的所有-Wno-unused-result
标志,但相应的-Wunused-result
仅设置默认值(仅在标志上发出警告)。使用-Wall -Wextra -pedantic
进行编译应该会触发警告,如果它可以被激活但是没有,所以它不能。
除此之外,我想知道为什么你会想要这个,忽略函数的结果并不常见,所有的库都可能产生大量的警告。
答案 1 :(得分:0)
虽然GCC似乎不可能,但你可以运行像coverity和lint这样的静态分析器来捕获它们。
答案 2 :(得分:0)
有一个clang插件,elfs-clang-plugins(由我自己创作,开源)有帮助。
虽然不适用于GCC,但它仍然有用,例如如果你可以将它添加到你的CI守门程序(如果你有的话),或者只是偶尔手动运行它。
warn_unused_result插件将为缺少warn_unused_result属性的函数发出警告。该插件仅考虑在当前编译单元中声明或定义的函数,因此外部库不会添加噪声。
该插件接受一个可选的arg,仅限于--static,这使得它仅警告静态函数(当更改外部API时工作太多)。
示例:
onNext
编译器输出:
int foo(void);
答案 3 :(得分: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