Sdílet prostřednictvím


Upozornění C6031

Vrácená hodnota byla ignorována: Volané funkce by mohla vrátit neočekávanou hodnotu.

Poznámky

Upozornění C6031 znamená, že volající nekontroluje návratovou hodnotu funkce pro selhání. V závislosti na tom, která funkce je volána, může tato chyba vést k zdánlivě náhodnému chování programu. To zahrnuje chybové ukončení a poškození dat v chybových podmínkách nebo v situacích s nízkými prostředky.

Obecně platí, že není bezpečné předpokládat, že volání funkcí vyžadujících disk, síť, paměť nebo jiné prostředky budou úspěšné. Volající by měl vždy zkontrolovat návratové hodnoty a správně zpracovávat chybové případy. Zvažte také použití poznámky _Must_inspect_result_ , která kontroluje, že je hodnota zkoumána užitečným způsobem.

Toto upozornění platí pro kód jazyka C i C++.

Název analýzy kódu: RETVAL_IGNORED_FUNC_COULD_FAIL

Příklad

Následující kód vygeneruje upozornění C6031:

#include <stdio.h>
int main()
{
    fopen("test.c", "r"); // C4996, C6031 return value ignored
    // code ...
}

Chcete-li toto upozornění opravit, zkontrolujte návratové hodnoty funkce, jak je znázorněno v následujícím kódu:

#include <stdio.h>
int main()
{
    FILE* stream;
    if ((stream = fopen("test.c", "r")) == NULL)
    {
        return;
    }
    // code ...
}

Následující kód používá k opravě tohoto upozornění bezpečnou funkci fopen_s :

#include <stdio.h>
int main()
{
    FILE* stream;
    errno_t err;

    if ((err = fopen_s(&stream, "test.c", "r")) != 0)
    {
        // code ...
    }
}

Toto upozornění se také vygeneruje, pokud volající ignoruje návratovou hodnotu funkce anotovanou _Check_return_ vlastností, jak je znázorněno v následujícím kódu.

#include <sal.h>
_Check_return_ bool func()
{
    return true;
}

int main()
{
    func();
}

Pokud chcete opravit předchozí upozornění, zkontrolujte vrácenou hodnotu, jak je znázorněno v následujícím kódu:

#include <sal.h>
_Check_return_ bool func()
{
    return true;
}

int main()
{
    if (func())
    {
        // code ...
    }
}

V případech, kdy je nutné ignorovat návratovou hodnotu funkce, přiřaďte vrácenou hodnotu std::ignore. Přiřazování jasně std::ignore indikuje záměr vývojáře a pomáhá při budoucí údržbě kódu.

#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.
    // ... 
}

Viz také

fopen_s, _wfopen_s
Použití poznámek SAL ke snížení vad kódu