다음을 통해 공유


경고 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
}

참고 항목

26450
26452
26453
26454
ES.103: 오버플로하지 않음