Udostępnij za pośrednictwem


Ostrzeżenie C26450

Przepełnienie arytmetyczne: operacja "operator" powoduje przepełnienie w czasie kompilacji. Używanie szerszego typu do przechowywania operandów (io.1)

Uwagi

To ostrzeżenie wskazuje, że operacja arytmetyczna była w czasie kompilacji w sposób prowokujący strata. Można to potwierdzić, gdy operandy są wszystkimi stałymi czasu kompilacji. Obecnie sprawdzamy operacje przesunięcia w lewo, mnożenia, dodawania i odejmowania dla takich przepełnienia.

Ostrzeżenie C4307 jest podobnym sprawdzeniem w kompilatorze Microsoft C++.

Nazwa analizy kodu: RESULT_OF_ARITHMETIC_OPERATION_PROVABLY_LOSSY

Przykłady

int multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    int c = a * b; // C26450 reported here
    return c;
}

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

long long multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    long long c = static_cast<long long>(a) * b; // OK
    return c;
}

Zobacz też

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