Sdílet prostřednictvím


Upozornění C26451

Aritmetické přetečení: Použití operátoru "operator" u hodnoty velikosti bajtu a následné přetypování výsledku na hodnotu velikosti b bajtu. Před voláním operátoru "operator" přetypujte hodnotu na širší typ, aby se zabránilo přetečení (io.2).

Toto upozornění označuje nesprávné chování, které má za následek celočíselné pravidla povýšení a typy větší než ty, ve kterých se obvykle provádí aritmetika.

Poznámky

Analýza kódu zjistí, kdy se integrální hodnota posune doleva, vynásobí, přičte nebo odečte a výsledek se přetypuje na širší integrální typ. Pokud operace přeteče užší celočíselný typ, dojde ke ztrátě dat. Tuto ztrátu můžete zabránit přetypováním hodnoty na širší typ před aritmetickou operací.

Název analýzy kódu: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

Příklady

Následující kód vygeneruje toto upozornění:

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

  // code
}

Pokud chcete toto upozornění opravit, použijte následující kód:

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

  // code
}

Viz také

26450
26452
26453
26454
ES.103: Nepřetečení