10

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

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

4

4 回答 4

3

不,您只能告诉 gcc 忽略所有warn_unused_result标志,-Wno-unused-result但各自-Wunused-result仅设置默认值(仅在标志上发出警告)。如果它可以被激活但它没有被激活,那么编译-Wall -Wextra -pedantic应该会触发一个警告,所以它不能。

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

于 2012-11-11T19:08:27.720 回答
0

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

于 2017-07-19T20:59:22.623 回答
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);
于 2017-09-12T14:28:04.000 回答
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
于 2019-11-27T03:29:43.413 回答