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

时间:2012-11-11 18:55:21

标签: c gcc compiler-construction compiler-warnings

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

我已经看到它可以和其他一些编译器一起使用。

4 个答案:

答案 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