Sdílet prostřednictvím


C6230

upozornění C6230: Implicitní přetypování mezi sémanticky rozdílnými celočíselnými typy: použití HRESULT v kontextu logické hodnoty

Toto upozornění signalizuje, že se používá holé HRESULT v kontextu, jako je například příkaz if , kde se očekává výsledek s logickou hodnotu.To pravděpodobně poskytne nesprávné výsledky.Například typická hodnota úspěchu pro HRESULT (S_OK) je false při testování jako logická hodnota.

Příklad

Následující kód generuje toto upozornění:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (hr)
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

Ve většině případů by mělo být použito makro SUCCEEDED nebo FAILED k otestování hodnoty HRESULT.Pro opravu tohoto upozornění použijte následující kód:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

Pro toto upozornění je typ SCODE ekvivalentní k HRESULT.

Všimněte si, že použití malloc a free (a souvisejících rozhraní API přidělení dynamické paměti) má mnoho nástrah v podobě nevracení paměti a výjimek.Chcete-li zabránit těmto druhům problémů úniky a výjimkami zcela, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.