경고 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
테스트해야 합니다.
자세한 내용은 다음 문서 중 하나를 참조하세요.
최신 C++ 메모리 할당 방법을 사용하려면 C++ STL(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr
및 컨테이너(예: vector
.)가 포함shared_ptr
됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기