Sdílet prostřednictvím


C28193

upozornění C28193: Proměnná obsahuje hodnotu, která musí být zkontrolována

Toto upozornění indikuje, že volaná funkce nekontroluje hodnotu zadané proměnné, která byla dodána funkcí.Vrácená hodnota je označena anotací _Check_return_, ale volaná funkce nepoužívá hodnotu nebo hodnotu přepisuje aniž by byla zkontrolována.

Toto upozornění je podobné upozornění C6031, ale je vyvoláno pouze, když kód neotestuje nebo nezkontroluje hodnotu proměnné, například při porovnávání.Prosté přiřazení této hodnoty není považováno za dostatečnou kontrolu pro zabránění vyvolání tohoto upozornění.Vytvořením aliasu výsledku mimo funkci je považováno za dostatečnou kontrolu, ale samotný výsledek by měl být anotován _Check_return_.

Některé funkce (jako je například funkce strlen) existují téměř výlučně kvůli návratové hodnotě, takže má smysl, aby měly anotaci _Check_return_.Pro tyto funkce může toto upozornění nástroj pro analýzu kódu zaznamenat, jestliže není návratová hodnota použita.To obvykle znamená ,že kód není korektní. Například může obsahovat přebytečný kód, který by mohl být smazán.Nicméně v některých výjimečných instancích nemusí být návratová hodnota záměrně použita.V nejběžnějším případě se jedná o návratovou hodnotu představující délku řetězce, která není před jakýmikoli dalšími testy použita.Tyto další testy provedou simulaci větve v místě, kde není délka řetězce použita.Pokud k tomu dojde, může být kód korektní, ale nebude efektivní.

Existují dvě základní strategie pro tyto případy, kdy není návratová hodnota použita:

Přepsání kódu tak, že bude délka řetězce vrácena pouze ve větvi, kde je ji potřeba.

Použití upozornění #pragma pro potlačení upozornění, jestliže přepsání kódu povede k vytvoření příliš komplexního nebo méně užitečného kódu.

Příklad

Následující ukázka kódu generuje toto upozornění:

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

Následující ukázka kódu předchází tomuto upozornění:

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