我正在为gcc搜索编译器标志,如果可能的话,还要为clang和Microsoft编译器搜索,-Werror如果在不使用返回值的情况下调用非void函数,则触发警告(错误):
int test() {
return 4;
}
int main(void) {
test(); //should trigger a warning
int number = test(); //shouldn't trigger the warning
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果没有这样的编译器标志,也许某种方式告诉clang静态分析器抱怨它.
编辑:澄清我原来的问题:我实际上是指使用返回值,而不仅仅是分配它.
我自己从未使用它(你真的需要吗?),你可以试试
warn_unused_result属性定义函数-Wunused-result标志gcc.这将告诉您函数返回中的任何未使用的值.
万一,有任何疑问,SEE IT LIVE或SEE IT LIVE AGAIN 感谢MM对评论中的链接
要么:
#include <stdio.h>
extern int func1(void) __attribute__((warn_unused_result));
extern int func2(void);
int main(void)
{
func1();
int rc1 = func1();
int rc2 = func1();
func2();
printf("%d\n", rc1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译(Mac OS X 10.10.5上的GCC 5.1.0):
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -c warn.c
warn.c: In function ‘main’:
warn.c:10:9: error: unused variable ‘rc2’ [-Werror=unused-variable]
int rc2 = func1();
^
warn.c:8:5: error: ignoring return value of ‘func1’, declared with attribute warn_unused_result [-Werror=unused-result]
func1();
^
cc1: all warnings being treated as errors
$
Run Code Online (Sandbox Code Playgroud)