Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zmienna zawiera wartość, którą należy zbadać
To ostrzeżenie wskazuje, że funkcja wywołująca nie sprawdza wartości określonej zmiennej, która została dostarczona przez funkcję. Zwracana wartość jest oznaczona adnotacją _Check_return_ z adnotacją, ale funkcja wywołująca nie używa wartości lub zastępowa wartość bez jego zbadania.
To ostrzeżenie jest podobne do ostrzeżenia C6031, ale jest zgłaszane tylko wtedy, gdy kod nie testuje ani nie sprawdza wartości zmiennej, na przykład przy użyciu jej w porównaniu. Po prostu przypisanie wartości nie jest uważane za wystarczające badanie, aby uniknąć tego ostrzeżenia. Aliasowanie wyniku z funkcji jest uznawane za wystarczające badanie, ale sam wynik powinien być oznaczony adnotacją ._Check_return_
Niektóre funkcje (takie jak strlen) istnieją prawie wyłącznie dla ich wartości zwracanej, więc warto mieć adnotację _Check_return_ . W przypadku tych funkcji narzędzie Analiza kodu może zgłosić to ostrzeżenie, gdy wartość zwracana jest nieużywany. To ostrzeżenie zwykle wskazuje, że kod jest niepoprawny, na przykład może zawierać kod resztowy, który można usunąć. Jednak w niektórych rzadkich przypadkach zwracana wartość nie jest celowo używana. Najczęstszym z tych wystąpień jest zwracanie długości ciągu, ale nie jest używane przed wykonaniem innego testu. Ten inny test powoduje symulowanie ścieżki, w której długość ciągu kończy się nieużywanym. W takim przypadku kod może być poprawny, ale może być nieefektywny.
Istnieją dwie podstawowe strategie radzenia sobie z tymi przypadkami, w których wartość zwracana jest nieużywany:
Zmień kolejność kodu, aby długość ciągu była zwracana tylko wzdłuż ścieżki, w której jest potrzebna.
#pragma Użyj ostrzeżenia, aby pominąć ostrzeżenie — jeśli zmień kolejność kodu, kod będzie zbyt złożony lub w inny sposób mniej przydatny.
Przykład
Poniższy przykład kodu generuje to ostrzeżenie:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
Poniższy przykład kodu pozwala uniknąć tego ostrzeżenia:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
if (nMapRegs < MIN_REQUIRED_MAPS) {
//...
}