경고 C6217
의미상 서로 다른 정수 형식 간의 암시적 캐스트: 'not'으로 HRESULT 테스트 대신 사용하거나
FAILED
매크로를 사용하는SUCCEEDED
것이 좋습니다.
설명
이 경고는 코드가 논리 not(!
) 연산자를 HRESULT
사용하여 테스트한다는 것을 나타냅니다. 값이 0(정의된 S_OK
값)이면 성공이 HRESULT
표시됩니다. 그러나 0은 부울 형식에 대한 오류도 나타냅니다. 논리가 아닌 연산자HRESULT
(!
)로 테스트하여 실행할 코드 블록을 결정하는 경우 잘못된 동작 또는 향후 기본tainers를 혼동하는 코드가 발생할 수 있습니다.
성공인지 실패인지 HRESULT
확인하려면 대신 매크로를 SUCCEEDED
FAILED
사용합니다.
이 경고는 형식과 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 ...
}
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기