Warnung C28196
Die Anforderung ist nicht erfüllt. (Der Ausdruck wird nicht mit "True" ausgewertet.)
Diese Warnung gibt an, dass die zu analysierende Funktion eine __notnull
oder __drv_valueIs
__null
eine ähnliche Anmerkung für einen _Out_
Parameter oder den Rückgabewert aufweist, der zurückgegebene Wert ist jedoch inkonsistent mit dieser Anmerkung.
Hinweise
Anmerkungen wie die __notnull
Invarianten zu _Out_
Parametern und Rückgabewerten beschreiben, die sowohl als Dokumentation als auch als Sanity-Überprüfung für den Autor der Funktion dienen. Warnung C28196 gibt einen Konflikt zwischen den Anmerkungen und dem tatsächlichen Verhalten der Funktion an. Die Warnung kann hilfreich sein, um Fälle zu ermitteln, in denen sich eine Funktion bei bestimmten Eingabewerten unerwartet verhält. Es liegt dann an dem Autor, zu entscheiden, was das beabsichtigte Verhalten der Funktion ist, und entweder die Anmerkungen oder die Implementierung entsprechend anzupassen.
Beispiele
Die folgende Funktion bewirkt die Warnung C28196, da sie mit _Ret_notnull_
Anmerkungen versehen ist, obwohl einige Codepfade einen Nullzeiger zurückgeben.
#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;
}
Um dieses Problem zu beheben, verfeinern Sie die Anmerkung so, dass sie das Verhalten der Funktion genau widerspiegelt.
#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;
}
Siehe auch
Kommentieren von Funktionsparametern und Rückgabewerten
Angeben, wann und wo eine Anmerkung gültig ist\