Condividi tramite


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