Поделиться через


C6220

Обновлен: Ноябрь 2007

C6220

Предупреждение C6220. Неявное преобразование между целочисленными типами с разной семантикой: сравнение HRESULT с -1. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED

Данное предупреждение означает, что HRESULT сравнивается с явным, не принадлежащим HRESULT значением -1, которое не является HRESULT с правильным форматом. Неудача HRESULT (E_FAIL) не представляется значением -1. Поэтому при неявном приведении значения HRESULT к целому числу создается неверное значение, которое, скорее всего, приведет к неверному результату.

Пример

В большинстве случаев данное предупреждение вызывается кодом, ошибочно ожидающим, что функция, которая должна возвращать значение HRESULT, возвращает целое число, используя –1 в качестве значения неудачи. Это предупреждение создается в следующем примере кода:

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

Для проверки значения HRESULT удобнее использовать макрос SUCCEEDED или FAILED. Для устранения этого предупреждения используйте следующий код:

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

Для данного предупреждения тип SCODE эквивалентен значению HRESULT.

Явное сравнение следует использовать для проверки конкретных значений HRESULT, например E_FAIL. В противном случае используйте макрос SUCCEEDED или FAILED.

См. также

Другие ресурсы

SUCCEEDED

FAILED