C6031
avviso C6031: valore restituito ignorato: <funzione> potrebbe restituire un valore imprevisto
L'avviso indica che la funzione chiamante non sta controllando il valore restituito da una chiamata a una funzione che segnala l'esito negativo.A seconda di quale sia la funzione chiamata, l'errore può portare a un malfunzionamento del programma apparentemente casuale, che include arresti anomali del sistema e danneggiamenti di dati in condizioni di errore o in situazioni di risorse limitate.
In generale, non è sicuro presumere che una chiamata a una funzione che richiede spazio su disco, rete, memoria o altre risorse abbia sempre esito positivo.Il chiamante dovrebbe sempre controllare il valore restituito e gestire i casi di errore nel modo appropriato.Valutare l'opportunità di utilizzare l'annotazione _Must_inspect_result_, che controlla che il valore venga analizzato in modo utile.
Esempio
Il codice seguente genera questo avviso:
#include <stdio.h>
void f( )
{
fopen( "test.c", "r" ); // return value ignored
// code ...
}
Per risolvere il problema, controllare il valore restituito della funzione come indicato nel codice seguente:
#include <stdio.h>
void f( )
{
FILE *stream;
if((stream = fopen( "test.c", "r" )) == NULL )
return;
// code ...
}
Per risolvere il problema nel codice seguente viene utilizzata la funzione protetta fopen_s:
#include <stdio.h>
void f( )
{
FILE *stream;
errno_t err;
if( (err = fopen_s( &stream, "test.c", "r" )) !=0 )
{
// code ...
}
}
L'avviso viene generato anche se il chiamante ignora il valore restituito di una funzione annotata con la proprietà _Check_return_, come illustrato nel codice seguente.
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
func(); // Warning C6031
}
Per risolvere il problema precedente, controllare il valore restituito come indicato nel codice seguente:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
if( func() ) {
// code …
}
}