Comportamento indefinido

Origem: Wikipédia, a enciclopédia livre.

Na ciência da computação, comportamento indefinido é um recurso existente em algumas linguagens de programação, notoriamente na linguagem C. Para simplificar a especificação e permitir maior flexibilidade de implementação, as especificações determinam que o resultado de algumas operações é indefinido. Operações que não sejam explicitamente definidas por um padrão também são associadas a comportamento indefinido.

Por exemplo, em C, o uso de qualquer variável antes que seu valor tenha sido inicializado leva a comportamento indefinido, assim como dividir um número por zero e indexar um vetor em índices que excedem seus limites (transbordamento de dados). Ao se deparar com qualquer uma dessas situações, o compilador é livre para qualquer ação, que pode ser a mais simples, a mais eficiente ou qualquer outra coisa.

É importante salientar que absolutamente qualquer ação tomada pelo compilador diante de uma situação de comportamento indefinido é válida, incluindo gerar mensagens de advertência ou silenciosamente ignorar a situação. Isso pode fazer com que programas aparentemente corretos, os quais compilam e rodam normalmente em uma determinada plataforma, deixem de compilar, sofram falhas de execução ou se comportem de maneira imprevisível em outras.