Warnung C6220
Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Vergleich von HRESULT mit -1. Erwägen Sie stattdessen die Verwendung oder
FAILED
dasSUCCEEDED
Makro.
Diese Warnung weist darauf hin, dass ein HRESULT
Wert mit einem expliziten, nicht-WertHRESULT
von -1 verglichen wird, der kein wohlgeformt HRESULT
ist.
Hinweise
Ein Fehler in HRESULT
(E_FAIL
) wird nicht durch ein -1 dargestellt. Daher führt die implizite Umwandlung von HRESULT
in eine ganze Zahl zu einen falschen Wert und wahrscheinlich zu einem falschen Ergebnis.
Codeanalysename: COMPARING_HRESULT_TO_MINUS_ONE
Beispiel
In den meisten Fällen wird die Warnung C6220 durch Code verursacht, der versehentlich erwartet, dass eine Funktion eine ganze Zahl zurückgibt, und die Verwendung von -1 als Fehlerwert, sondern die Funktion gibt eine HRESULT
. Im folgenden Code wird diese Warnung generiert:
#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;
}
}
Es ist am besten, das Makro oder das SUCCEEDED
FAILED
Makro zu verwenden, um den Wert eines .HRESULT
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#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;
}
}
Bei dieser Warnung entspricht der SCODE
-Typ HRESULT
.
Ein expliziter Vergleich eignet sich zum Überprüfen auf bestimmte HRESULT
-Werte, z. B. E_FAIL
. Verwenden Sie andernfalls die SUCCEEDED
Makros.FAILED
Weitere Informationen finden Sie unter SUCCEEDED
"Makro " und FAILED
"Makro".
Die Verwendung und malloc
free
(und verwandte APIs für die dynamische Speicherzuweisung) hat viele Fallstricke in Bezug auf Speicherlecks und Ausnahmen. Um diese Arten potenzieller Lecks vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden. Dazu gehören shared_ptr
, , unique_ptr
und Container wie vector
. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.