ExpertiDict

C · Avançado · Português · Técnico

comportamento não especificado

/kõ.poɾ.ta.ˈmẽ.tu ˈnɐ̃w̃ is.pe.si.fi.ˈka.du/substantivo

Caso em que o padrão admite mais de um resultado válido sem exigir que o compilador documente qual escolheu, como a ordem de avaliação dos argumentos de uma função.

Onde usar

Surge em chamadas como a() + b(), onde a ordem de avaliação varia entre compiladores. O programa continua válido, ao contrário do indefinido, mas o resultado pode divergir.

Em código

#include <stdio.h>
int a(void) { puts("a"); return 1; }
int b(void) { puts("b"); return 2; }
int main(void) {
  printf("%d\n", a() + b());  // a ou b antes?
}

Exemplos

A ordem dos argumentos é comportamento não especificado, então não dependa dela.

Não é indefinido, só não especificado: cada compilador escolhe uma ordem.

Cuidado

Confundir com comportamento indefinido (o padrão não impõe nada) e com definido pela implementação (o compilador precisa documentar a escolha).

Sinônimos

unspecified behavior

Antônimos

comportamento definido

Veja também

Todos os termos de C