Comportamiento indefinido

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

Un comportamiento indefinido (undefined behavior en inglés) en programación se refiere a la operación cuyo comportamiento es arbitrario. En los lenguajes de programación en los que se han definido comportamientos indefinidos las implementaciones pueden asumir que las operaciones que provocan un comportamiento indefinido nunca ocurren. Esta suposición hace válidas varias transformaciones del programa o simplifica las pruebas de validez dándole flexibilidad a la implementación del lenguaje. Es responsabilidad del programador escribir código que nunca invoque comportamientos indefinidos, pero la implementación del lenguaje tiene permitido mostrar mensajes de diagnóstico cuando esto suceda.

La existencia de comportamientos indefinidos le permite al lenguaje omitir algunas comprobaciones como (en el caso de C) que el divisor no sea 0 o que el resultado de una suma de enteros sin signo no sea mayor al máximo valor admitido por ese tipo de enteros sin signo. Esto ahorra algunos ciclos del procesador cada vez que esas operaciones son invocadas y asigna la responsabilidad de hacer esas comprobaciones cuando sean relevantes al programador.

Los efectos de la invocación de una operación que provoque un comportamiento indefinido pueden variar dependiendo de la arquitectura del procesador en la que se ejecute el programa, el cambio en cualquiera de los elementos de la cadena de herramientas (como el compilador), el sistema operativo, el contenido de la memoria, el momento de ejecución, etc.

Entre los posibles efectos de la invocación de un comportamiento indefinido está la ejecución esperada del programa (lo que oculta el problema), el cierre inesperado del programa, corrupción de la memoria, resultados incorrectos, fallo irrecuperable del sistema informático, vulnerabilidades de seguridad, etc.

Los comportamientos indefinidos no deben ser confundidos con los los comportamientos no especificados o los comportamientos definidos por la implementación.

Comportamiento indefinido en C[editar]

Los comportamientos indefinidos en C únicamente son aquellos que son definidos como tales en el estándar ISO/IEC 9899 cuya ultima versión es ISO/IEC 9899:2011

Enlaces externos[editar]