C6031
警告 C6031: 戻り値が無視されました。<関数> が予期しない値を返した可能性があります。
この警告は、戻り値によってエラーを通知する関数呼び出しの戻り値が、呼び出し元の関数でチェックされていないことを示します。 この問題により、呼び出される関数の種類に応じて、エラー条件やリソース不足の状況でのクラッシュやデータ破損など、一見ランダムなプログラムの異常が発生します。
一般的に、ディスク、ネットワーク、メモリなどのリソースを必要とする関数を常に正常に呼び出すことができると仮定することは危険です。 呼び出し元では常に戻り値をチェックし、エラーとなった場合は適切に処理する必要があります。
使用例
この警告が発生するコード例を次に示します。
#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 ...
}
}
また、この警告は次のコードに示すように MustCheck プロパティによって注釈を付けた関数の戻り値が呼び出し元で無視される場合にも生成されます。
#include <codeanalysis\sourceannotations.h>
[returnvalue:SA_Post(MustCheck=SA_Yes)] bool func( );
void test_f()
{
func( ); //return value ignored
}
上の警告を修正するには、次のコードに示すように戻り値をチェックします。
void test_f()
{
if( func( ) )
{
//code...
}
}