Utilice la instrucción goto en C

Jinku Hu 12 octubre 2023
  1. Utilice la instrucción goto para implementar un bucle en C
  2. Utilice la instrucción goto para salir de los bucles anidados en C
Utilice la instrucción goto en C

Este artículo demostrará varios métodos sobre cómo utilizar la instrucción goto en C.

Utilice la instrucción goto para implementar un bucle en C

La palabra clave goto es parte del lenguaje C y proporciona una construcción para hacer un salto incondicional. Las declaraciones if y switch son ejemplos de saltos condicionales. La construcción goto consta de dos partes: la llamada goto y el nombre de la etiqueta. Cualquier declaración en el código puede ir precedida de una etiqueta, que es solo un identificador seguido de dos puntos. La llamada goto obliga a la ejecución del código a saltar a la primera instrucción después de la etiqueta. goto solo puede saltar a la etiqueta dentro de la misma función y las etiquetas son visibles en toda la función independientemente de en qué línea estén definidas.

En el siguiente ejemplo, demostramos un bucle simple que compara la variable score con 1000 en cada bucle. Si score es menor que igual, aumenta y salta a la declaración de comparación nuevamente. Una vez que la declaración if es verdadera, se invoca otra llamada goto y la ejecución salta a la etiqueta EXIT, lo que lleva a la terminación normal del programa. Este código de ejemplo, similar a muchos otros, se puede reimplementar sin declaraciones goto, haciéndolos relativamente fáciles de leer. En general, ha habido un debate vigoroso sobre la declaración goto, algunos lo consideran completamente dañino para el código legible y otros aún ven algunos casos de uso práctico para él.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char **environ;

int main(int argc, char *argv[]) {
  int score = 1;

START:
  if (score > 1000) goto EXIT;

  score += 1;
  goto START;

EXIT:
  printf("score: %d\n", score);
  exit(EXIT_SUCCESS);
}

Producción :

score: 1001

Utilice la instrucción goto para salir de los bucles anidados en C

La instrucción goto puede ser útil para cambiar el flujo de control si se cumple la instrucción condicional dentro de un bucle, y también se debe omitir algún código. El siguiente ejemplo de código muestra un escenario similar, donde se accede y se busca en el array de variables de entorno. Observe que la declaración if externa verifica si el puntero es válido y solo entonces procede a ejecutar el bucle. El bucle en sí tiene otro condicional dentro de él, que verifica la cadena específica de cada variable de entorno. Si se encuentra la cadena, podemos salir del bucle, no desperdiciar más recursos de procesamiento y omitir la siguiente declaración printf. Esto crea un caso útil para que la llamada goto se incluya dentro de la instrucción if interna que haría que el programa salte fuera de la instrucción externa if, continuando ejecutando el resto del código.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char **environ;

int main(int argc, char *argv[]) {
  if (environ != NULL) {
    for (size_t i = 0; environ[i] != NULL; ++i) {
      if (strncmp(environ[i], "HOME", 4) == 0) {
        puts(environ[i]);
        goto END;
      }
    }
    printf("No such variable found!\n");
  }
END:

  exit(EXIT_SUCCESS);
}

Producción :

HOME=/home/username
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook