다음을 통해 공유


C6219

경고 C6219: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT를 1 또는 TRUE와 비교하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.

이 경고는 HRESULT를 HRESULT 값이 아닌 명시적인 1과 비교하고 있음을 나타냅니다. HRESULT의 일반적인 성공 값(S_OK)은 0이므로 이 경우 잘못된 결과가 나타날 수 있습니다. 이 값을 부울 형식과 비교하면 값이 암시적으로 false로 변환됩니다.

예제

다음 코드에서는 CoGetMalloc에서 HRESULT가 반환된 다음 TRUE와 비교되기 때문에 이 경고가 생성됩니다.

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

대부분의 경우 이 경고는 코드에서 HRESULT를 실수로 부울에 대해 테스트하기 때문에 발생합니다. 일반적으로 HRESULT의 값을 테스트하려면 SUCCEEDED 또는 FAILED 매크로를 사용하는 것이 가장 좋습니다. 이 경고를 해결하려면 다음 코드를 사용합니다.

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

이 경고의 경우 SCODE 형식은 HRESULT와 동일합니다.