C6031
警告 C6031:返回值被忽略:<function> 可能会返回意外的值
此警告意味着调用函数不检查函数调用的返回值,而函数调用是通过返回值来指示失败的。此缺陷可能导致程序随机地出现错误行为,包括在出错或资源不足的情况下发生系统崩溃和数据损坏,具体情况视调用的函数而定。
通常,如果调用函数需要磁盘空间、网络、内存或其他资源,则假定该调用总是能够成功是不安全的。调用方应当总是检查返回值,并适当地处理错误情况。也可考虑使用 _Must_inspect_result_ 批注,以检查该值是否用一种有效的方式检查的。
示例
下面的代码生成此警告:
#include <stdio.h>
void f( )
{
fopen( "test.c", "r" ); // return value ignored
// code ...
}
若要更正此警告,请检查函数的返回值,如下面的代码所示:
#include <stdio.h>
void f( )
{
FILE *stream;
if((stream = fopen( "test.c", "r" )) == NULL )
return;
// code ...
}
下面的代码使用安全函数 fopen_s 来更正此警告:
#include <stdio.h>
void f( )
{
FILE *stream;
errno_t err;
if( (err = fopen_s( &stream, "test.c", "r" )) !=0 )
{
// code ...
}
}
如果调用方忽略使用 _Check_return_ 属性批注的函数的返回值,也会生成此警告,如下面的代码所示:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
func(); // Warning C6031
}
若要更正上面的警告,请检查返回值,如下面的代码所示:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
if( func() ) {
// code …
}
}