Warnung C6230
Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Verwenden von HRESULT in einem booleschen Kontext
Hinweise
Diese Warnung gibt an, dass eine Bare HRESULT
in einem Kontext verwendet wird, in dem ein boolesches Ergebnis erwartet wird, z. B. eine if
Anweisung. Dieser Test führt wahrscheinlich zu falschen Ergebnissen. Beispielsweise ist der typische Erfolgswert für HRESULT
(S_OK
) falsch, wenn er als boolescher Wert getestet wird.
Codeanalysename: USING_HRESULT_IN_BOOLEAN_CONTEXT
Beispiel
Der folgende Code generiert diese Warnung:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
In den meisten Fällen sollte das MAKRO ERFOLGREICH oder FEHLGESCHLAGEN verwendet werden, um den Wert der HRESULT
. So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
Für diese Warnung wird der SCODE
Typ als ein HRESULT
.
Die Verwendung von malloc
und free
(und verwandten dynamischen Speicher-APIs) hat viele Fallstricke als Ursache für Speicherverluste und Ausnahmen. Um diese Arten von Lecks und Ausnahmeproblemen zu vermeiden, verwenden Sie den Zeiger und containerklassen, die von der C++-Standardbibliothek bereitgestellt werden. Dazu gehören shared_ptr, unique_ptr und Vektoren. Weitere Informationen finden Sie unter Smart Pointers and C++ Standard Library.