Advertencia C28196

No se cumple el requisito. (La expresión no se evalúa como true).

Esta advertencia indica que la función que se está analizando tiene una __notnullanotación , __null__drv_valueIs o similar en un _Out_ parámetro o en el valor devuelto, pero el valor devuelto es incoherente con esa anotación.

Comentarios

Anotaciones como __notnull se describen invariables sobre _Out_ parámetros y valores devueltos, que sirve tanto como documentación como una comprobación de integridad para el autor de la función. Advertencia C28196 indica una discrepancia entre las anotaciones y el comportamiento real de la función. La advertencia puede ser útil para detectar casos en los que una función puede comportarse inesperadamente para determinados valores de entrada. A continuación, el autor decide cuál es el comportamiento previsto de la función y adapta las anotaciones o la implementación en consecuencia.

Ejemplos

La siguiente función provoca la advertencia C28196 porque se anota con _Ret_notnull_ aunque algunas rutas de acceso de código devuelvan un puntero nulo.

#include <sal.h>

_Ret_notnull_
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

Para resolver este problema, afina la anotación para reflejar con precisión el comportamiento de la función.

#include <sal.h>

_When_(index < len, _Ret_notnull_)
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

Consulte también

Anotación de parámetros de función y valores devueltos
Especificar cuándo y dónde se aplica una anotación\