Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Estouro aritmético: usando o operador 'operator' em um valor de bytes de tamanho a e, em seguida, convertendo o resultado em um valor de byte tamanho b. Converta o valor para o tipo mais amplo antes de chamar o operador 'operator' para evitar estouro (io.2)
Esse aviso indica um comportamento incorreto que resulta de regras de promoção integrais e tipos maiores do que aqueles em que a aritmética normalmente é executada.
Comentários
A análise de código detecta quando um valor integral é deslocado para a esquerda, multiplicado, adicionado ou subtraído e o resultado é convertido em um tipo integral mais amplo. Se a operação estourar o tipo integral mais estreito, os dados serão perdidos. Você pode evitar essa perda convertendo o valor em um tipo mais amplo antes da operação aritmética.
Nome da análise de código: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
Exemplos
O seguinte código gera esse aviso:
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
Para corrigir esse aviso, use o seguinte código:
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}