경고 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++ 표준 라이브러리를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기