Sdílet prostřednictvím


C6221

upozornění C6221: implicitní přetypování mezi celé sémanticky různé typy: porovnání HRESULT na celé číslo.Zvažte použití makra byl úspěšný nebo NEÚSPĚŠNÝ místo

Toto upozornění znamená, že HRESULT je porovnávána celé číslo větší než nula.Úspěch v HRESULT (S_OK) je reprezentován 0.Proto implicitní nádech HRESULT na celé generovat nesprávná hodnota a mohou vést k nesprávné výsledky.To je často způsobeno omylem očekává funkce vrátí celočíselnou při skutečně vrátí HRESULT.

Příklad

Následující kód vygeneruje toto upozornění porovnáním HRESULT proti celočíselnou hodnotu:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Chcete-li opravit toto upozornění následující kód používá FAILED makro:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Pro toto upozornění SCODE typu je ekvivalentní HRESULT.

Další informace naleznete v Bylo úspěšně DOKONČENO makro a se nezdařilo makro.