Partilhar via


Aviso C6031

Valor retornado ignorado: a called-function' pode retornar um valor inesperado

Comentários

O aviso C6031 indica que o chamador não verifica se ocorreu uma falha no valor retornado de uma função. Dependendo da função chamada, esse defeito poderá causar um comportamento incorreto do programa aparentemente aleatório. Isso inclui falhas e corrupções de dados em condições de erro ou situações de poucos recursos.

Em geral, não é seguro presumir que as chamadas para funções que exigem disco, rede, memória ou outros recursos serão bem-sucedidas. O chamador deverá sempre verificar o valor retornado e tratar os casos de erro adequadamente. Também é recomendável usar a anotação _Must_inspect_result_, que verifica se o valor é examinado de modo eficaz.

Esse aviso se aplica ao código C e C++.

Nome da análise de código: RETVAL_IGNORED_FUNC_COULD_FAIL

Exemplo

O seguinte código gera o aviso C6031:

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

Para corrigir esse aviso, verifique o valor retornado da função conforme mostrado no código a seguir:

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

O código a seguir usa a função segura fopen_s para corrigir esse aviso:

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

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

Esse aviso também é gerado se o chamador ignorar o valor retornado de uma função anotada com a propriedade _Check_return_ conforme mostrado no código a seguir.

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

int main()
{
    func();
}

Para corrigir o aviso anterior, verifique o valor retornado conforme mostrado no código a seguir:

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

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

Nos casos em que for necessário ignorar o valor retornado de uma função, atribua o valor retornado a std::ignore. Atribuir a std::ignore indicará claramente a intenção do desenvolvedor e ajudará na manutenção futura do código.

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

Confira também

fopen_s, _wfopen_s
Usar anotações da SAL para reduzir defeitos do código