C · Intermediário · Português · Técnico
estouro de inteiro
Resultado fora do intervalo de um int com sinal. Em C isso é comportamento indefinido, não um giro para negativo; tipos sem sinal dão a volta (módulo 2^N).
Onde usar
Aparece em cálculos de tamanho, somas de índices e checagens como a + b < a. O compilador pode assumir que o estouro nunca ocorre e remover a verificação inteira.
Em código
#include <limits.h>
int soma(int a, int b, int *r) {
if (b > 0 && a > INT_MAX - b) return 0;
if (b < 0 && a < INT_MIN - b) return 0;
*r = a + b;
return 1;
}Exemplos
O compilador removeu a checagem porque o estouro de inteiro com sinal é indefinido.
Verifica contra INT_MAX antes de somar, não depois.
Cuidado
Testar o estouro depois que ele acontece, como if (a + 1 < a) com int; verifique antes da conta, comparando com INT_MAX.
Sinônimos
overflow de inteiro