C6219
Ostrzeżenie C6219: niejawne rzutowanie pomiędzy semantycznie różnymi typami całkowitymi: porównanie HRESULT z 1 lub TRUE.Należy rozważyć użycie makra POWODZENIE lub NIEPOWODZENIE zamiast
Ostrzeżenie to wskazuje, że HRESULT jest porównywana z jawną wartością jedynki (1), nie będącą HRESULT.Może to doprowadzić do niepoprawnych wyników, ponieważ typowa wartość powodzenia HRESULT (S_OK) wynosi 0, co przy porównaniu z typem Boolean będzie niejawnie konwertowane na fałsz.
Przykład
Poniższy kod generuje to ostrzeżenie, ponieważ CoGetMalloc zwraca HRESULT, który następnie jest porównywany z TRUE:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
W większości przypadków ostrzeżenie to jest spowodowane przez kod omyłkowo sprawdzający HRESULT jako wartość logiczną.Zazwyczaj najlepiej jest używać makr SUCCEEDED lub FAILED do sprawdzania wartości HRESULT.Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
W przypadku tego ostrzeżenia typ SCODE jest równoważny HRESULT.