Dominando la sentencia goto en C: sintaxis, uso práctico y mejores prácticas
Dominando la sentencia goto en C
En esta guía aprenderá cómo funciona la sentencia goto en C, su sintaxis correcta, cuándo puede ser útil y por qué generalmente se desaconseja en código moderno.
Sintaxis de la sentencia goto
goto etiqueta;
...
etiqueta: sentencia;
Una etiqueta es un identificador seguido de dos puntos. Cuando se ejecuta la sentencia goto, el control salta directamente a la línea marcada por esa etiqueta.

Ejemplo: Usar goto para salir de un bucle temprano
#include <stdio.h>
int main() {
const int maxEntrada = 100;
int i;
double numero, promedio, suma = 0.0;
for (i = 1; i <= maxEntrada; ++i) {
printf("%d. Ingrese un número: ", i);
scanf("%lf", &numero);
/* Si el usuario ingresa un número negativo, saltar el resto del bucle */
if (numero < 0.0) {
goto salir_bucle;
}
suma += numero;
}
salir_bucle:
promedio = suma / (i - 1);
printf("Suma = %.2f\n", suma);
printf("Promedio = %.2f", promedio);
return 0;
}
Salida
1. Ingrese un número: 3 2. Ingrese un número: 4.3 3. Ingrese un número: 9.3 4. Ingrese un número: -2.9 Suma = 16.60 Promedio = 5.53
Por qué la mayoría de desarrolladores evitan goto
La sentencia goto puede crear "código espagueti" que es difícil de leer, probar y mantener. Por ejemplo:
uno:
for (i = 0; i < numero; ++i) {
test += i;
goto dos;
}
dos:
if (test > 5) {
goto tres;
}
// ...
Saltar fuera de ámbitos anidados o a través de estructuras de control complejas a menudo oculta el flujo del programa, llevando a errores difíciles de diagnosticar.
Cuándo goto podría seguir siendo apropiado
Aunque rara vez es necesario, goto puede simplificar escenarios específicos, como:
- Salir de bucles profundamente anidados sin múltiples banderas.
- Centralizar código de limpieza antes de salir de una función.
Úselo con moderación, y siempre documente la intención para que los futuros mantenedores entiendan el propósito del salto.
¿Debería usar goto?
En la mayoría de programas modernos en C, las construcciones de control de flujo estructurado—bucles, funciones y sentencias switch—cubren los casos de uso para goto. El estándar de C y las guías de mejores prácticas recomiendan evitarlo a menos que haya una razón convincente. Como dijo famosamente Bjarne Stroustrup, creador de C++: "El hecho de que 'goto' pueda hacer cualquier cosa es exactamente por qué no lo usamos."
En última instancia, si puede lograr la misma lógica con código claro y estructurado, elija ese camino. Reserve goto para situaciones raras y bien justificadas y documéntelo a fondo.
Lenguaje C
- Tecnología del Localizador (Beeper): De Primeras Innovaciones a la Comunicación Bidireccional del Mañana
- ¿Qué es un Número de Parte? Entendiendo su Rol en Inventario y Ventas
- Dominando la lógica condicional en C#: If, If-Else, If-ElseIf y sentencias If anidadas
- Dominando la sentencia switch en C#: Sintaxis, ejemplos y mejores prácticas
- Sentencia break en C#: Cómo y cuándo usarla
- Dominando la sentencia continue en C#: Cómo saltar iteraciones de bucles eficazmente
- Dominando las Sentencias Condicionales en C++: if, if...else y if...else Anidado Explicados
- Dominando la Sentencia break en C++
- Dominando la sintaxis básica de C: Tokens, estructura y punto y coma
- Dominando la sentencia pass en Python: Guía práctica
- Números en Python: Entendiendo tipos de datos numéricos inmutables