ExpertiDict

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

undefined behavior

/ˌʌn.dɪˈfaɪnd bɪˈheɪ.vjɚ/substantivo

Situação em que o padrão C não impõe nenhum requisito ao programa, e o compilador pode gerar qualquer comportamento. Exemplos: overflow de inteiro com sinal e acesso fora dos limites.

Onde usar

Um programa com UB pode funcionar no seu teste e quebrar em outro compilador ou nível de otimização, porque o otimizador assume que UB nunca acontece. Em code review, é o bug mais caro de achar depois.

Em código

int f(int x) {
  return x + 1 > x; // UB se x == INT_MAX
}
// com -O2, pode virar return 1

Exemplos

That shift is undefined behavior when the count is 32.

Esse shift é undefined behavior quando a contagem é 32.

It works in debug but breaks with -O2, so I suspect undefined behavior.

Funciona em debug mas quebra com -O2, então suspeito de undefined behavior.

Cuidado

Confundir com comportamento definido pela implementação, que varia entre compiladores mas é documentado e previsível.

Sinônimos

UB, comportamento indefinido

Veja também

Todos os termos de C