Udostępnij przez


Ostrzeżenie C26451

Przepełnienie arytmetyczne: użycie operatora "operator" dla wartości bajtowej rozmiaru , a następnie rzutowanie wyniku na wartość bajtu size-b . Rzutowanie wartości na szerszy typ przed wywołaniem operatora "operator", aby uniknąć przepełnienia (io.2)

To ostrzeżenie wskazuje nieprawidłowe zachowanie, które wynika z całkowitych reguł podwyższania poziomu i typów większych niż te, w których arytmetyka jest zwykle wykonywana.

Uwagi

Analiza kodu wykrywa, kiedy wartość całkowita zostaje przesunięta w lewo, pomnożona, dodana lub odejmowana, a wynik zostaje rzutowany na szerszy typ całkowity. Jeśli operacja przepełni węższy typ całkowity, dane zostaną utracone. Można zapobiec tej utracie, odrzucając wartość do szerszego typu przed operacją arytmetyczną.

Nazwa analizy kodu: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

Przykłady

Następujący kod generuje to ostrzeżenie:

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = i << 31;  // C26451 reported here

  // code
}

Aby poprawić to ostrzeżenie, użyj następującego kodu:

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = static_cast<unsigned long long>(i) << 31; // OK

  // code
}

Zobacz też

26450
26452
26453
26454
ES.103: Nie przepełnij