Código inalcanzable para niños
En programación, el código inalcanzable es una parte del código fuente que nunca podrá ser ejecutado porque no existe ningún camino dentro de las estructuras de control en el resto del programa para llegar a este código.
Suele referirse a este tipo de código como código muerto, aunque entre ellos hay una diferencia (el código muerto se ejecuta pero no produce cambios en la salida del programa).
El código inalcanzable generalmente se considera indeseable por las siguiente razones:
- Ocupa memoria innecesaria.
- Genera almacenamiento innecesario en la caché de instrucciones de la CPU - lo que también disminuye la localidad de datos.
- Desde la perspectiva de mantenimiento de software, se pierde tiempo y esfuerzo en mantener y documentar una pieza de código que nunca se ejecuta.
Causas
La existencia de código inalcanzable puede ser debido a varios factores, tales como:
- Errores de programación en situaciones complejas de saltos condicionales.
- Consecuencia de las transformaciones internas realizadas por un compilador optimizador.
- Pruebas de software incompletas que no se pudo detectar código inalcanzable.
- Código obsoleto que un programador se haya olvidado de borrar.
- Código no utilizado que un programador haya decidido no suprimir, ya que estaba entremezclado con el código funcional.
- Código condicionalmente útil que nunca será alcanzado, dado que los datos de entrada nunca causará que el código va a ser ejecutado.
- Código complejo obsoleto que se retuvo intencionalmente, pero se dejó inalcanzable para que pueda ser utilizado más adelante en el desarrollo si es necesario.
- Construcciones de depuración y vestigios de código durante el desarrollo que aún no se han retirado del programa.
En los últimos cinco casos, el código que es inalcanzable, a menudo existe como parte de un legado, es decir, código que una vez fue útil, pero ya no se utiliza o no se requiere. Sin embargo, el código inalcanzable también puede ser parte de un componente complejo (biblioteca, módulo o rutina), donde el código sigue siendo útil en conjunción con diferentes datos de entrada (nunca generada por la aplicación actual) o en condiciones que no se cumplen en el entorno de ejecución actual, haciendo el código correspondiente inalcanzable, pero puede ocurrir en otros entornos de ejecución, para que el componente no ha sido desarrollado.
Un ejemplo de tal código condicionalmente inalcanzable puede ser la implementación de una función printf() en la biblioteca de tiempo de ejecución de un compilador, el cual contiene el código complejo para procesar todos los argumentos de cadenas posibles, de los que en realidad es sólo un pequeño subconjunto utilizados en el programa. Sin tener que recompilar la biblioteca de ejecución, los compiladores normalmente no serán capaces de eliminar las secciones de código no utilizadas en tiempo de compilación.
Ejemplo
Considerando el siguiente código en C:
int foo (int X, int Y) {
return X + Y;
int Z = X*Y;
}
La definición de Z = X*Y nunca es alcanzada debido a que la función retorna el flujo del programa a la parte que la llamó antes, de esta manera dicha definición puede ser descartada.
Véase también
En inglés: Unreachable code Facts for Kids
- Código muerto
- Código redundante
- Cobertura de código