Utilice la instrucción goto en C
-
Utilice la instrucción
goto
para implementar un bucle en C -
Utilice la instrucción
goto
para salir de los bucles anidados 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
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