Condividi tramite


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\