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 …
    }
}

请参见

参考

fopen_s、_wfopen_s

其他资源

批注概述

MustCheck