경고 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
.
명시적 비교는 같은 특정 HRESULT
값E_FAIL
에 대해 검사 데 적합합니다. 그렇지 않으면 매크로를 SUCCEEDED
FAILED
사용합니다.
자세한 내용은 매크로 및 FAILED
매크로를 참조 SUCCEEDED
하세요.
사용 malloc
및 free
(및 관련 동적 메모리 할당 API)에는 메모리 누수 및 예외 측면에서 많은 단점이 있습니다. 이러한 종류의 잠재적 누출을 완전히 방지하려면 C++ STL(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr
및 컨테이너(예: vector
.)가 포함shared_ptr
됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기