Avertissement C28196

L’exigence n’est pas satisfaite. (L’expression ne prend pas la valeur True.)

Cet avertissement indique que la fonction analysée a une __notnullannotation , __null__drv_valueIs ou similaire sur un _Out_ paramètre ou la valeur de retour, mais que la valeur retournée est incohérente avec cette annotation.

Notes

Les annotations telles que __notnull décrire des invariants sur _Out_ les paramètres et les valeurs de retour, qui servent à la fois de documentation et de case activée d’intégrité pour l’auteur de la fonction. Avertissement C28196 indique une incompatibilité entre les annotations et le comportement réel de la fonction. L’avertissement peut être utile pour découvrir les cas où une fonction peut se comporter de manière inattendue pour certaines valeurs d’entrée. Il incombe ensuite à l’auteur de déterminer le comportement prévu de la fonction et d’adapter les annotations ou l’implémentation en conséquence.

Exemples

La fonction suivante provoque l’avertissement C28196, car elle est annotée avec _Ret_notnull_ même si certains chemins de code retournent un pointeur Null.

#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;
}

Pour résoudre ce problème, affinez l’annotation pour refléter avec précision le comportement de la fonction.

#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;
}

Voir aussi

Annoter les paramètres de fonction et les valeurs de retour
Spécification du moment et de l’endroit où une annotation s’applique\