다음을 통해 공유


경고 C6214

의미상 다른 정수 형식 간 캐스팅: HRESULT에서 부울 형식으로

이 경고는 부울 형식으로 캐스팅되고 있음을 HRESULT 나타냅니다. 0과 HRESULT 같은 성공 값(S_OK)입니다. 그러나 0은 부울 형식에 대한 오류를 나타냅니다. HRESULT 부울 형식으로 캐스팅한 다음 테스트 식에 사용하면 잘못된 결과가 생성됩니다.

설명

경우에 따라 이 경고는 부울 변수에 저장되는 경우에 HRESULT 발생합니다. 부울 변수를 사용하여 성공 또는 실패를 HRESULT 테스트하는 비교는 잘못된 결과를 초래할 수 있습니다.

코드 분석 이름: CAST_HRESULT_TO_BOOL

예시

다음 코드는 경고 C6214를 생성합니다.

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning C6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

이 경고를 수정하려면 다음 코드를 사용합니다.

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr))
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

이 경고의 SCODE 경우 형식은 .에 해당합니다 HRESULT.

일반적으로 또는 FAILED 매크로를 SUCCEEDED 사용하여 값을 HRESULT테스트해야 합니다.

자세한 내용은 다음 문서 중 하나를 참조하세요.

SUCCEEDED

FAILED

최신 C++ 메모리 할당 방법을 사용하려면 C++ STL(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr및 컨테이너(예: vector.)가 포함shared_ptr됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.