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.