GOTO

La instrucción transfiere el control a un punto determinado del código donde debe continuar la ejecución.

La instrucción GOTO ha sido menospreciada en los lenguajes de alto nivel, debido a la dificultad que presenta para poder seguir adecuadamente el flujo del programa.

Cuando la ejecución del programa llega a la instrucción GOTO, la siguiente sentencia ejecutada será la que se encuentre en :Etiqueta.

También, en FORTRAN y algunas versiones de BASIC la línea a la que saltar podía ser indicada mediante una expresión aritmética.

Como resultado, es más sencillo obtener código inconsistente, incompleto o complicado de mantener.

Además, por lo general se programan macros o equivalentes para evitar la utilización de GOTO.

También podría darse el caso si algún lenguaje olvida aportar solución que al ir entregando desde la pila los sucesivos retornos, se apunte a un lugar diferente de la que el programador esperaba, por la cascada de entradas fue una y la cascada de salidas debiendo ser en orden inversa conserva una salida que nunca se va a producir, falsificando con ello todas las devoluciones anteriores a esa que se ha quedado perdida por la instrucción goto.

Un modo en que algunos lenguajes solventan este problema es utilizando una pila exclusivamente local y eliminarla cuando se sale del procedimiento local, en dicho caso la dirección de retorno se guarda en una pila de ámbito mayor.

También de este modo es posible hacer que el código se comporte de una forma que el lenguaje no tenía previsto en su diseño y aprovechar con ello una posible situación eficiente, para realizar determinadas tareas.

Adicionalmente para solventar los posibles problemas que el inadecuado uso de GOTO pueda originar, los lenguajes de alto nivel y que utilizan programación mediante bloques y módulos bien definidos y aislados, no permiten sobre GOTO más que operar dentro del bloque o módulo donde se aloja.

GOTO es incondicional, es decir ordena el salto de ejecución del programa a una dirección concreta.

Es por esto que una instrucción GOTO, no guarda el origen de procedencia en la pila.

Como puede deducirse en el ejemplo a continuación, ambos hacen lo mismo, y la diferencia radica en que usando GOTO, el programador debe controlar todos los saltos (véase líneas GOTO x3), para regresar al punto de partida.

Como ya se ha indicado, el salto de GOTO es incondicional, al llegar a ese punto se ejecuta y eso es todo, a un posible lector, no le queda claro cual es la razón de salto, solo sabe a ciencia cierta que la ejecución continúa en el punto indicado y nada más, para comprender mejor que sucede necesita estudiar con detenimiento las condiciones previas, lo que supone una ardua tarea, especialmente cuando se busca código optimizado para velocidad ya que entonces el mismo puede resultar más difícil de entender.

Son estas últimas quienes determinan si el salto se produce dadas las condiciones.

En Lenguaje de programación C# se declaran las etiquetas con dos puntos al final.

Tecla "GOTO" en la computadora doméstica ZX Spectrum de 1982, implementada con BASIC nativo (entrada de comando con una sola tecla).