Предупреждение C6031
Возвращаемое значение игнорируется: "вызываемая функция" может возвращать непредвиденное значение
Замечания
Предупреждение C6031 указывает, что вызывающий объект не проверяет возвращаемое значение функции для сбоя. В зависимости от вызываемой функции этот дефект может привести к, казалось бы, случайной программе неправильной работы. Это включает сбои и повреждения данных в условиях ошибки или ситуации с низким ресурсом.
Как правило, небезопасно предположить, что вызовы функций, требующих дисков, сети, памяти или других ресурсов, будут успешными. Вызывающий объект всегда должен проверять возвращаемое значение и обрабатывать случаи ошибок соответствующим образом. Кроме того, рекомендуется использовать заметку _Must_inspect_result_
, которая проверяет, что значение проверяется полезным способом.
Это предупреждение относится как к коду C, так и к C++.
Имя анализа кода: RETVAL_IGNORED_FUNC_COULD_FAIL
Пример
Следующий код создает предупреждение C6031:
#include <stdio.h>
int main()
{
fopen("test.c", "r"); // C4996, C6031 return value ignored
// code ...
}
Чтобы исправить это предупреждение, проверьте возвращаемое значение функции, как показано в следующем коде:
#include <stdio.h>
int main()
{
FILE* stream;
if ((stream = fopen("test.c", "r")) == NULL)
{
return;
}
// code ...
}
Следующий код использует безопасную функцию fopen_s
для исправления этого предупреждения:
#include <stdio.h>
int main()
{
FILE* stream;
errno_t err;
if ((err = fopen_s(&stream, "test.c", "r")) != 0)
{
// code ...
}
}
Это предупреждение также создается, если вызывающий объект игнорирует возвращаемое значение функции, аннотированной свойством _Check_return_
, как показано в следующем коде.
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
func();
}
Чтобы исправить предыдущее предупреждение, проверьте возвращаемое значение, как показано в следующем коде:
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
if (func())
{
// code ...
}
}
В случаях, когда необходимо игнорировать возвращаемое значение функции, назначьте возвращаемое значение std::ignore
. Назначение std::ignore
явно указывает намерение разработчика и помогает в будущем обслуживании кода.
#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.
// ...
}
См. также
fopen_s
, _wfopen_s
Использование заметок SAL для уменьшения дефектов кода