Предупреждение 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 для уменьшения дефектов кода