Udostępnij za pośrednictwem


C6220

Ostrzeżenie C6220 - niejawny cast między całkowitą semantycznie różnych typów: porównanie HRESULT-1.Należy rozważyć użycie zamiast niego makro SUCCEEDED lub nie powiodło się

To ostrzeżenie wskazuje, że HRESULT jest porównywana z jawne, non-HRESULT wartość -1, który nie jest poprawnie sformułowanym HRESULT.Niepowodzenie w HRESULT (E_FAIL) nie jest reprezentowana przez -1.W związku z tym, niejawny cast z HRESULT na liczbę całkowitą wygeneruje niepoprawną wartość i może doprowadzić do niewłaściwego wynik.

Przykład

W większości przypadków to ostrzeżenie jest spowodowana przez kod omyłkowo oczekiwano, że funkcja, która powinna zwrócić HRESULT zamiast zwraca liczbę całkowitą, używając –1 jako wartość Brak.Poniższy przykładowy kod generuje ostrzeżenie to:

#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;
  }
}

Najlepiej używać SUCCEEDED lub FAILED makro do testowania wartości HRESULT.Aby poprawić to ostrzeżenie, należy użyć następującego kodu:

#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;
  }
}

W przypadku tego ostrzeżenia, SCODE typu jest równoważne z HRESULT.

Jawne porównanie jest właściwe sprawdzić, czy szczególne HRESULT wartości, takie jak E_FAIL.W przeciwnym razie, użyj SUCCEEDED lub FAILED makr.

Aby uzyskać więcej informacji, zobacz Makro pomyślnie i nie powiodło się makro.