C6221
경고 C6221: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT를 정수와 비교하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.
이 경고는 HRESULT를 0이 아닌 정수와 비교하고 있음을 나타냅니다. 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 매크로를 참조하십시오.