Udostępnij za pośrednictwem


Ostrzeżenie C28196

Wymaganie nie jest spełnione. (Wyrażenie nie daje wartości true).

To ostrzeżenie wskazuje, że analizowana funkcja ma adnotację __notnull, __null__drv_valueIs lub podobną _Out_ dla parametru lub zwracanej wartości, ale zwracana wartość jest niespójna z tą adnotacją.

Uwagi

Adnotacje, takie jak __notnull opisywanie niezmiennych _Out_ parametrów i zwracanych wartości, które służą zarówno jako dokumentacja, jak i jako sprawdzanie kondycji autora funkcji. Ostrzeżenie C28196 wskazuje niezgodność między adnotacjami a rzeczywistym zachowaniem funkcji. Ostrzeżenie może być przydatne w przypadku odnajdywania przypadków, w których funkcja może zachowywać się nieoczekiwanie dla niektórych wartości wejściowych. Następnie autor decyduje o zamierzonym zachowaniu funkcji i odpowiednio dostosować adnotacje lub implementację.

Przykłady

Poniższa funkcja powoduje ostrzeżenie C28196, ponieważ jest oznaczona adnotacją _Ret_notnull_ , mimo że niektóre ścieżki kodu zwracają wskaźnik o wartości 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;
}

Aby rozwiązać ten problem, uściślij adnotację, aby dokładnie odzwierciedlać zachowanie funkcji.

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

Zobacz też

Dodawanie adnotacji do parametrów funkcji i zwracanych wartości
Określanie miejsca i warunków stosowania adnotacji\