경고 C26451
산술 오버플로: 크기-a 바이트 값에 연산자 'operator'를 사용한 다음, 결과를 size-b 바이트 값으로 캐스팅합니다. 오버플로를 방지하기 위해 연산자 'operator'를 호출하기 전에 값을 더 넓은 형식으로 캐스팅(io.2)
이 경고는 일반적으로 산술 연산이 수행되는 규칙보다 큰 정수 승격 규칙 및 형식에서 발생하는 잘못된 동작을 나타냅니다.
설명
코드 분석은 정수 계열 값이 왼쪽, 곱하기, 추가 또는 뺄 때를 감지하고 결과는 더 넓은 정수 계열 형식으로 캐스팅됩니다. 작업이 더 좁은 정수 계열 형식을 오버플로하면 데이터가 손실됩니다. 산술 연산 전에 값을 더 넓은 형식으로 캐스팅하여 이 손실을 방지할 수 있습니다.
코드 분석 이름: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
예제
다음 코드는 이 경고를 생성합니다.
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
이 경고를 수정하려면 다음 코드를 사용합니다.
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기