Avviso C6031
Valore restituito ignorato: 'called-function' potrebbe restituire un valore imprevisto
Osservazioni:
Avviso C6031 indica che il chiamante non controlla il valore restituito di una funzione per l'errore. A seconda della funzione chiamata, questo difetto può causare un comportamento apparentemente casuale del programma. Inclusi arresti anomali e danneggiamenti dei dati in condizioni di errore o situazioni di risorse basse.
In generale, non è sicuro presupporre che le chiamate a funzioni che richiedono disco, rete, memoria o altre risorse avranno esito positivo. Il chiamante deve sempre controllare il valore restituito e gestire i casi di errore in modo appropriato. Prendere in considerazione anche l'uso dell'annotazione _Must_inspect_result_
, che verifica che il valore venga esaminato in modo utile.
Questo avviso si applica al codice C e C++.
Nome dell'analisi del codice: RETVAL_IGNORED_FUNC_COULD_FAIL
Esempio
Il codice seguente genera l'avviso C6031:
#include <stdio.h>
int main()
{
fopen("test.c", "r"); // C4996, C6031 return value ignored
// code ...
}
Per correggere questo avviso, controllare il valore restituito della funzione, come illustrato nel codice seguente:
#include <stdio.h>
int main()
{
FILE* stream;
if ((stream = fopen("test.c", "r")) == NULL)
{
return;
}
// code ...
}
Il codice seguente usa la funzione fopen_s
sicura per correggere questo avviso:
#include <stdio.h>
int main()
{
FILE* stream;
errno_t err;
if ((err = fopen_s(&stream, "test.c", "r")) != 0)
{
// code ...
}
}
Questo avviso viene generato anche se il chiamante ignora il valore restituito di una funzione annotata con la _Check_return_
proprietà , come illustrato nel codice seguente.
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
func();
}
Per correggere l'avviso precedente, controllare il valore restituito come illustrato nel codice seguente:
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
if (func())
{
// code ...
}
}
Nei casi in cui è necessario ignorare il valore restituito di una funzione, assegnare il valore restituito a std::ignore
. L'assegnazione a std::ignore
indica chiaramente la finalità dello sviluppatore e contribuisce alla manutenzione del codice futura.
#include <tuple>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
int main()
{
std::srand(static_cast<unsigned int>(std::time(nullptr))); // set initial seed value to system clock
std::ignore = std::rand(); // Discard the first result as the few random results are always small.
// ...
}
Vedi anche
fopen_s
, _wfopen_s
Uso delle annotazioni SAL per ridurre i difetti del codice