我正在为gcc搜索编译器标志,如果可能的话,还要搜索clang和Microsoft编译器,如果在不使用的情况下调用非void函数,则会触发警告(-Werror
错误)返回值如下:
int test() {
return 4;
}
int main(void) {
test(); //should trigger a warning
int number = test(); //shouldn't trigger the warning
return 0;
}
如果没有这样的编译器标志,可能会告诉clang静态分析器抱怨它。
编辑:澄清我的原始问题:我实际上是指使用返回值,而不仅仅是分配它。
答案 0 :(得分:8)
我自己从未使用过它(你真的需要吗?),你可以试试
warn_unused_result
属性-Wunused-result
启用gcc
标记。 这将告诉您函数return中的任何未使用的值。
如有任何疑问, SEE IT LIVE 或 SEE IT LIVE AGAIN 感谢M.M评论中的链接功能
或者:
#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;
}
编译(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
$
答案 1 :(得分:1)
某些静态代码分析器(如splint)可以检查这些事情:
$ splint check.c
Splint 3.1.2 --- 03 May 2009
check.c: (in function main)
check.c:6:5: Return value (type int) ignored: test()
Result returned by function call is not used. If this is intended, can cast
result to (void) to eliminate message. (Use -retvalint to inhibit warning)
与@ Sourav的回答不同,这不需要在目标函数上使用特定的__attribute__
注释,但另一方面可能会发出许多警告。通常可以通过使用注释(如/*@alt void@*/
)来抑制特定函数或函数调用的警告。