다음을 통해 공유


경고 C6230

의미상 서로 다른 정수 형식 간의 암시적 캐스트: 부울 컨텍스트에서 HRESULT 사용

설명

이 경고는 문과 같이 부울 결과가 예상되는 컨텍스트에서 bare HRESULT 가 사용됨을 if 나타냅니다. 이 테스트는 잘못된 결과를 생성할 가능성이 높습니다. 예를 들어 부울로 테스트할 때 (S_OK)의 일반적인 성공 값 HRESULT 은 false입니다.

코드 분석 이름: USING_HRESULT_IN_BOOLEAN_CONTEXT

예시

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

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (hr)
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

대부분의 경우 SUCCEEDED 또는 FAILED 매크로를 사용하여 값을 HRESULT테스트해야 합니다. 이 경고를 수정하려면 다음 코드를 사용합니다.

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (SUCCEEDED(hr))
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

이 경고의 경우 형식은 SCODE .로 HRESULT처리됩니다.

malloc 사용 및 free (및 관련 동적 메모리 API)에는 메모리 누수 및 예외의 원인으로 많은 함정이 있습니다. 이러한 종류의 누수 및 예외 문제를 방지하려면 C++ 표준 라이브러리에서 제공하는 포인터 및 컨테이너 클래스를 사용합니다. 여기에는 shared_ptr, unique_ptr벡터가 포함되며, 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.