La frase "comportamiento indefinido" (UB) se utiliza en los lenguajes de programación C y C++ para describir las acciones del compilador que son indefinidas, es decir, el compilador no está obligado a emitir un mensaje de diagnóstico o realizar cualquier acción específica, como llamar a una función, cuando se encuentra con dicho código.
La presencia de un comportamiento indefinido puede introducir errores sutiles, y potencialmente catastróficos, en un programa. Debido a que el compilador no está obligado a emitir un mensaje de diagnóstico o realizar alguna acción específica, el programador puede no ser consciente de que su código está invocando un comportamiento indefinido. Esto puede conducir a errores difíciles de rastrear que sólo pueden manifestarse bajo ciertas optimizaciones del compilador o en arquitecturas de hardware específicas.
Una de las formas más comunes de comportamiento indefinido es hacer referencia a un puntero nulo. Esto puede llevar a fallos, corrupción de datos u otros comportamientos inesperados.
Otras formas de comportamiento indefinido incluyen el desbordamiento de enteros con signo, la división por cero, y el acceso a un elemento de matriz fuera de los límites.
Los estándares C y C++ definen un pequeño conjunto de comportamientos que son explícitamente indefinidos. Sin embargo, los compiladores no están obligados a diagnosticar el comportamiento indefinido, por lo que los programas pueden invocar un comportamiento indefinido sin que el programador se dé cuenta.
Generalmente es mejor evitar el comportamiento indefinido en su código. En algunos casos, como con la optimización, el compilador puede ser capaz de optimizar el código que contiene un comportamiento indefinido de una manera que no conduce a ningún problema. Sin embargo, generalmente no es seguro confiar en el comportamiento indefinido, ya que puede conducir a errores difíciles de rastrear. ¿Qué significa un código indefinido? Un código indefinido significa que no hay un valor específico asignado a él. Esto puede ocurrir por varias razones, pero normalmente es porque el código no ha sido inicializado o porque está haciendo referencia a una variable no definida. ¿Es el comportamiento no especificado un comportamiento indefinido? No, un comportamiento no especificado no es un comportamiento indefinido. El comportamiento no especificado deja espacio para el comportamiento definido por la implementación, lo que significa que el comportamiento es definido por la implementación (compilador, sistema operativo, etc.), no por la especificación del lenguaje. ¿Qué tipo de error es una variable indefinida? Una variable indefinida es un error que se produce cuando se intenta acceder a una variable que no ha sido declarada. Esto puede ocurrir cuando se olvida de declarar una variable, o cuando se intenta acceder a una variable que no existe.
¿Qué es un código indefinido?
Un código indefinido significa que no hay un valor específico asignado a él. Hay muchas causas para esto, sin embargo la más frecuente es el hecho de que el código no ha sido inicializado o es nuevo. Cuando el código es indefinido, normalmente no es posible ejecutarlo. ¿Es un bucle infinito un comportamiento indefinido? Sí, un bucle infinito es un comportamiento indefinido.