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 __notnull
annotation , __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\