다음을 통해 공유


경고 C6217

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

설명

이 경고는 코드가 논리 not(!) 연산자를 HRESULT 사용하여 테스트한다는 것을 나타냅니다. 값이 0(정의된 S_OK값)이면 성공이 HRESULT표시됩니다. 그러나 0은 부울 형식에 대한 오류도 나타냅니다. 논리가 아닌 연산자HRESULT(!)로 테스트하여 실행할 코드 블록을 결정하는 경우 잘못된 동작 또는 향후 기본tainers를 혼동하는 코드가 발생할 수 있습니다.

성공인지 실패인지 HRESULT 확인하려면 대신 매크로를 SUCCEEDEDFAILED 사용합니다.

이 경고는 형식과 SCODE 형식 모두 HRESULT 에 대해 작동합니다.

코드 분석 이름: TESTING_HRESULT_WITH_NOT

예시

다음 코드는 논리 not(!) 연산자를 사용하여 값의 HRESULT 성공 또는 실패를 결정하기 때문에 이 경고를 생성합니다. 이 경우 0은 성공을 나타내므로 코드가 HRESULT 잘못된 코드 경로를 실행하므로 ( !hr ) 오류 코드를 잘못 실행합니다.

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

이 경고를 수정하기 위해 다음 코드는 매크로를 FAILED 사용하여 오류를 검사.

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

참고 항목

SUCCEEDED 매크로
FAILED 매크로