Freigeben über


Warnung C6217

Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Testen von HRESULT mit "not". Erwägen Sie stattdessen die Verwendung SUCCEEDED oder FAILED 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 ...
  }
}

Siehe auch

SUCCEEDED Makro
FAILED Makro