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


C6221

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

C6221

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

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

Пример

В следующем коде в результате сравнения значения HRESULT с целым числом создается данное предупреждение:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

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

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

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

См. также

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

SUCCEEDED

FAILED