Advertencia C28193

La variable contiene un valor que se debe examinar

Esta advertencia indica que la función que realiza la llamada no comprueba el valor de la variable especificada, que proporcionó una función. El valor devuelto se anota con la anotación _Check_return_, pero la función de llamada no usa el valor o sobrescribe el valor sin examinarlo.

Esta advertencia es similar a la advertencia C6031, pero solo se notifica cuando el código no prueba ni examina el valor de la variable, como usarlo en una comparación. Simplemente asignar el valor no se considera un examen suficiente para evitar esta advertencia. La creación de un alias del resultado de la función se considera un examen suficiente, pero el propio resultado debe anotarse con _Check_return_.

Algunas funciones (como strlen) existen casi exclusivamente por su valor devuelto, por lo que tiene sentido que tengan la anotación _Check_return_. Para estas funciones, la herramienta Code Analysis podría notificar esta advertencia cuando el valor devuelto es no usado. Esta advertencia suele indicar que el código es incorrecto, por ejemplo, podría contener código residual que se podría eliminar. Sin embargo, en algunos casos poco frecuentes, el valor devuelto no se usa intencionadamente. La más común de estas instancias es cuando se devuelve una longitud de cadena, pero no se usa antes de que se realicen más pruebas. La siguiente prueba hace que se simule una ruta de acceso en la que la longitud de la cadena termina sin usarse. Cuando esto sucede, el código puede ser correcto, pero quizás no sea eficaz.

Hay dos estrategias principales para tratar los casos en que el valor devuelto no se usa:

Reordene el código para que la longitud de la cadena solo se devuelva a lo largo de la ruta de acceso donde sea necesario.

Use una advertencia #pragma para suprimir la advertencia (si se vuelve a ordenar el código, el código es demasiado complejo o, de lo contrario, es menos útil).

Ejemplo

El siguiente código de ejemplo genera esta advertencia:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...

El siguiente código de ejemplo evita esta advertencia:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
if (nMapRegs < MIN_REQUIRED_MAPS) {
//...
}