다음을 통해 공유


경고 C6220

의미상 서로 다른 정수 형식 간의 암시적 캐스트: HRESULT와 -1 비교. 대신 사용하거나 FAILED 매크로를 사용하는 SUCCEEDED 것이 좋습니다.

이 경고는 올바른 형식HRESULT이 아닌 -1의 명시적 비HRESULT값과 비교되고 있음을 나타냅니다HRESULT.

설명

(E_FAIL)의 HRESULT 오류는 -1로 표시되지 않습니다. 따라서 정수에 암시적으로 캐스팅 HRESULT 하면 잘못된 값이 생성되고 잘못된 결과가 발생할 수 있습니다.

코드 분석 이름: COMPARING_HRESULT_TO_MINUS_ONE

예시

대부분의 경우 경고 C6220은 함수가 실수로 정수 반환 및 -1을 실패 값으로 사용하는 것으로 예상하는 코드로 인해 발생하지만 대신 함수는 반환합니다 HRESULT. 다음 코드 샘플에서는 이 경고를 생성합니다.

#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;
  }
}

또는 매크로를 SUCCEEDED 사용하여 값을 테스트하는 것이 가장 좋습니다HRESULT.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.

명시적 비교는 같은 특정 HRESULTE_FAIL에 대해 검사 데 적합합니다. 그렇지 않으면 매크로를 SUCCEEDEDFAILED 사용합니다.

자세한 내용은 매크로 및 FAILED 매크로를 참조 SUCCEEDED 하세요.

사용 mallocfree (및 관련 동적 메모리 할당 API)에는 메모리 누수 및 예외 측면에서 많은 단점이 있습니다. 이러한 종류의 잠재적 누출을 완전히 방지하려면 C++ STL(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr및 컨테이너(예: vector.)가 포함shared_ptr됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.