Share via


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와 동일합니다.

명시적 비교는 E_FAIL과 같은 특정한 HRESULT 값을 검사하는 데 적합합니다. 그렇지 않은 경우에는 SUCCEEDED 또는 FAILED 매크로를 사용하십시오.

자세한 내용은 SUCCEEDED 매크로FAILED 매크로를 참조하십시오.