Share via


Advertencia C6031

Valor devuelto omitido: la 'función llamada' podría devolver un valor inesperado

Comentarios

La advertencia C6031 indica que el autor de la llamada no comprueba si se produce un error en el valor devuelto de una función. Según la función a la que se llama, este defecto puede conducir a un comportamiento erróneo aparentemente aleatorio en el programa. Esto incluye bloqueos y daños en los datos en condiciones de error o situaciones de recurso insuficientes.

Por lo general, no es seguro suponer que las llamadas a funciones que requieren disco, red, memoria u otros recursos se van a realizar correctamente. El autor de la llamada siempre debe comprobar el valor devuelto y controlar los casos de error correctamente. Considere también la posibilidad de usar la anotación _Must_inspect_result_, que comprueba que el valor se examina de forma útil.

Esta advertencia se aplica al código de C y C++.

Nombre de análisis de código: RETVAL_IGNORED_FUNC_COULD_FAIL

Ejemplo

El código siguiente genera la advertencia C6031:

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

Para corregir esta advertencia, compruebe el valor devuelto de la función tal y como se muestra en el código siguiente:

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

El código siguiente utiliza la función segura fopen_s para corregir esta advertencia:

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

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

Esta advertencia también se genera si el autor de la llamada omite el valor devuelto de una función anotada con la propiedad _Check_return_, tal como se muestra en el código siguiente.

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

int main()
{
    func();
}

Para corregir la advertencia anterior, compruebe el valor devuelto tal y como se muestra en el código siguiente:

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

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

En los casos en los que sea necesario omitir el valor devuelto de una función, asigne este valor devuelto a std::ignore. La asignación a std::ignore indica claramente la intención del desarrollador y ayuda en el mantenimiento futuro del 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.
    // ... 
}

Consulte también

fopen_s, _wfopen_s
Uso de anotaciones SAL para reducir los defectos en el código