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