Warnung C6217
Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Testen von HRESULT mit "not". Erwägen Sie stattdessen die Verwendung
SUCCEEDED
oderFAILED
das Makro.
Hinweise
Diese Warnung gibt an, dass der Code einen HRESULT
mit dem Operator "Logical-not!
()" testet. Ein Wert von 0 (der für S_OK
) definierte Wert gibt einen Erfolg in einem HRESULT
. 0 gibt jedoch auch einen Fehler für einen booleschen Typ an. Wenn Sie einen HRESULT
mit dem Operator "Wahrheitsfrei" (!
) testen, um zu bestimmen, welcher Codeblock ausgeführt werden soll, kann er zu einem falschen Verhalten oder Code führen, der zukünftige Standard tainer verwechselt.
Um zu überprüfen, ob ein HRESULT
Erfolg oder Fehler auftritt, verwenden Sie stattdessen die SUCCEEDED
Makros oder FAILED
Makros.
Diese Warnung funktioniert sowohl für typen HRESULT
SCODE
als auch für.
Codeanalysename: TESTING_HRESULT_WITH_NOT
Beispiel
Der folgende Code generiert diese Warnung, da er den Operator "Logisches Nicht(!
)" verwendet, um Erfolg oder Fehler eines HRESULT
Werts zu ermitteln. In diesem Fall führt der Code den falschen Codepfad aus, da eine HRESULT
von 0 den Erfolg angibt, sodass ( !hr )
der Fehlercode falsch ausgeführt wird:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (!hr)
{
// failure code ...
}
else
{
// success code ...
}
}
Um diese Warnung zu korrigieren, verwendet der folgende Code ein FAILED
Makro, um nach Fehlern zu suchen:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// failure code ...
}
else
{
// success code ...
}
}