C6031
Ostrzeżenie C6031: wartość zwrócona została zignorowana: <function> mogła zwrócić nieoczekiwaną wartość
Ostrzeżenie to wskazuje, że funkcja wywołująca nie sprawdza wartości zwróconej po wywołaniu funkcji, która sygnalizuje niepowodzenie za pomocą swojej wartości zwracanej.W zależności od tego, która funkcja jest wywoływana, usterka ta może prowadzić do pozornie losowego zachowania programu, w tym awarii i uszkodzeń danych w warunkach błędu lub niskiego poziomu zasobów.
Ogólnie, nie jest bezpieczne założenie, że wywołanie funkcji wymagające zasobów dyskowych, sieciowych, pamięci lub innych zawsze zakończy się pomyślnie.Wywołujący powinien zawsze sprawdzić wartość zwróconą i odpowiednio obsłużyć przypadek błędu.Rozważ także użycie adnotacji _Must_inspect_result_, która sprawdzi czy wartość jest badana w użyteczny sposób.
Przykład
Poniższy kod generuje to ostrzeżenie:
#include <stdio.h>
void f( )
{
fopen( "test.c", "r" ); // return value ignored
// code ...
}
Aby poprawić to ostrzeżenie, sprawdź wartość zwracaną funkcji, jak pokazano w poniższym kodzie:
#include <stdio.h>
void f( )
{
FILE *stream;
if((stream = fopen( "test.c", "r" )) == NULL )
return;
// code ...
}
Następujący kod używa bezpiecznej funkcji fopen_s, aby poprawić to ostrzeżenie:
#include <stdio.h>
void f( )
{
FILE *stream;
errno_t err;
if( (err = fopen_s( &stream, "test.c", "r" )) !=0 )
{
// code ...
}
}
Ostrzeżenie to jest generowane także, gdy wywołujący zignoruje wartość zwracaną funkcji oznaczonej adnotacją za pomocą właściwości _Check_return_, jak pokazano w poniższym kodzie.
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
func(); // Warning C6031
}
Aby poprawić poprzednie ostrzeżenie, sprawdź wartość zwracaną, jak pokazano w poniższym kodzie:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
if( func() ) {
// code …
}
}