Condividi tramite


Avviso C28193

La variabile contiene un valore che deve essere esaminato

Questo avviso indica che la funzione chiamante non controlla il valore della variabile specificata, fornita da una funzione. Il valore restituito viene annotato con l'annotazione _Check_return_ , ma la funzione chiamante non usa il valore o sovrascrive il valore senza esaminarlo.

Questo avviso è simile all'avviso C6031, ma viene segnalato solo quando il codice non testa o esamina il valore della variabile, ad esempio usandolo in un confronto. La semplice assegnazione del valore non è considerata un esame sufficiente per evitare questo avviso. L'aliasing del risultato dalla funzione è considerato un esame sufficiente, ma il risultato stesso deve essere annotato con _Check_return_.

Alcune funzioni (ad esempio strlen) esistono quasi esclusivamente per il valore restituito, quindi è opportuno che abbiano l'annotazione _Check_return_ . Per queste funzioni, lo strumento di analisi del codice potrebbe segnalare questo avviso quando il valore restituito non è usato. Questo avviso indica in genere che il codice non è corretto, ad esempio potrebbe contenere codice residuo che potrebbe essere eliminato. Tuttavia, in alcune rare istanze, il valore restituito non viene intenzionalmente usato. La più comune di queste istanze è la posizione in cui viene restituita una lunghezza di stringa, ma non viene effettivamente usata prima che venga eseguito un altro test. Questo altro test determina la simulazione di un percorso in cui la lunghezza della stringa finisce per essere inutilizzata. In questo caso, il codice può essere corretto, ma potrebbe risultare inefficiente.

Esistono due strategie principali per gestire questi casi in cui il valore restituito non è usato:

Riordinare il codice in modo che la lunghezza della stringa venga restituita solo lungo il percorso in cui è necessario.

Usare un #pragma avviso per eliminare l'avviso. Se riordinando il codice, è necessario rendere il codice troppo complesso o meno utile.

Esempio

Nell'esempio riportato di seguito il codice genera questo avviso:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...

Nell'esempio riportato di seguito il codice evita questo avviso:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
if (nMapRegs < MIN_REQUIRED_MAPS) {
//...
}