Freigeben über


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 __notnulloder __drv_valueIs__nulleine ä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\