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.