Compartir a través de


C28193

Advertencia C28193: La variable contiene un valor que debe examinarse

Esta advertencia indica que la función de llamada no está comprobando el valor de la variable especificada, la cual fue proporcionada por una función.El valor devuelto se anota con la anotación _Check_return_, pero la función de llamada puede no estar usando el valor o bien estar sobrescribiendo el valor sin examinarlo.

Esta advertencia es similar a la advertencia C6031, pero se notifica únicamente cuando el código no prueba ni examina el valor de la variable, como cuando se usa en una comparación.Simplemente asignar el valor no se considera un examen suficiente como para evitar esta advertencia.Hacerle un alias al resultado de la función se considera un examen suficiente, pero se debe anotar el mismo resultado con _Check_return_.

Algunas funciones (como strlen) existen casi exclusivamente para su valor devuelto, de modo que tenga sentido el tener la anotación _Check_return_.Para estas funciones, la herramienta de análisis de código notifica esta advertencia cuando el valor devuelto no se usa.Normalmente esto indica que el código es incorrecto, por ejemplo, puede contener código residual que podría eliminarse.Sin embargo, en algunas instancias excepcionales, intencionadamente, el valor devuelto no se utiliza.La instancia más común es cuando se devuelve una longitud de cadena pero no se utiliza realmente antes de hacer alguna otra prueba.Esa otra prueba hace que se simule un camino en el que la longitud de la cadena termina por no utilizarse.Cuando esto sucede, el código puede ser correcto, pero podría ser ineficiente.

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

Reordenar el código de forma que la longitud de la cadena sólo se devuelva en la trayectoria siempre que sea necesaria.

Utilizar una advertencia #pragma para suprimir la advertencia--si al reordenar el código puede terminar haciendo el código demasiado complejo o menos útil.

Ejemplo

El siguiente ejemplo de código genera la advertencia:

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

El siguiente ejemplo de código evita la advertencia:

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