Avviso C28196
Il requisito non è soddisfatto. L'espressione non restituisce true.
Questo avviso indica che la funzione analizzata ha un'annotazione __notnull
, __null
__drv_valueIs
o simile su un _Out_
parametro o sul valore restituito, ma il valore restituito non è coerente con tale annotazione.
Osservazioni:
Le annotazioni come __notnull
descrivono invarianti sui _Out_
parametri e sui valori restituiti, che funge sia da documentazione che come controllo della integrità per l'autore della funzione. Avviso C28196 indica una mancata corrispondenza tra le annotazioni e il comportamento effettivo della funzione. L'avviso può essere utile per individuare i casi in cui una funzione potrebbe comportarsi in modo imprevisto per determinati valori di input. Spetta quindi all'autore decidere qual è il comportamento previsto della funzione e adattare le annotazioni o l'implementazione di conseguenza.
Esempi
La funzione seguente causa l'avviso C28196 perché viene annotato con _Ret_notnull_
anche se alcuni percorsi di codice restituiscono un puntatore 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;
}
Per risolvere questo problema, perfezionare l'annotazione per riflettere in modo accurato il comportamento della funzione.
#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;
}
Vedi anche
Annotazione dei parametri della funzione e valori restituiti
Specificare dove e quando applicare un'annotazione\