C6220
C6220 - implicitní přetypování mezi celé sémanticky různé typy upozornění: porovnání HRESULT-1.Zvažte použití makra byl úspěšný nebo NEÚSPĚŠNÝ místo
Toto upozornění znamená, že HRESULT je porovnávána s explicitní, non-HRESULT hodnotu -1, která není správný formát HRESULT.Selhání v HRESULT (E_FAIL) není reprezentován hodnota -1.Proto implicitní nádech HRESULT na celé generovat nesprávná hodnota a mohou vést k nesprávné výsledky.
Příklad
Ve většině případů toto upozornění je způsobeno kód, který omylem očekává funkce, která by se měl vrátit HRESULT místo vrátí celé číslo, tak selhání hodnotu –1.Následující ukázkový kód generuje toto upozornění:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Je vhodné použít SUCCEEDED nebo FAILED makro k testování hodnoty HRESULT.Chcete-li opravit toto upozornění, použijte následující kód:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Pro toto upozornění SCODE typu je ekvivalentní HRESULT.
Je vhodné vyhledat konkrétní explicitní srovnání HRESULT hodnoty, jako například E_FAIL.Jinak použijte SUCCEEDED nebo FAILED makra.
Další informace naleznete v Bylo úspěšně DOKONČENO makro a se nezdařilo makro.