ExpertiDict

C · Intermediário · Português · Técnico

estouro de inteiro

/is.ˈto.ɾu dʒi ĩ.ˈtej.ɾu/substantivo

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

Veja também

Todos os termos de C