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\