You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

2 Días
2 Hrs
16 Min
40 Seg

Expresión goto

11/13
Resources

What is the GOTO statement and why is it controversial?

The GOTO statement in C language is a historical curiosity, often viewed with skepticism by experienced programmers. It is an instruction that allows you to jump to any part of the code, which might sound like a practical solution, but in reality can lead to bad practices. Dennis Ritchie, one of the creators of the C language, warned that this instruction was "highly abusable". Its excessive use generates code that is more difficult to maintain and understand, as it can break the clear sequential logic of a well-structured program.

A better practice is to use control structures such as if loops, while loops, or state machines to direct the flow of code. These practices not only improve code comprehension, but also enhance maintainability and debugging.

When to use GOTO in C?

Although the GOTO statement is not recommended in most cases, there is one specific scenario where its use might be considered: when you need to exit a nested multilevel structure to a specific place, such as an error handling routine.

Example code for error handling

Imagine you have a robotics program with several sensors. If one of those sensors detects a critical error, you might want to reset your program or direct the flow to a routine that handles the error. This is where the use of GOTO can be considered for fast and safe error handling. A code example would be:

#include <stdio.h>
int main() { // Code with multiple levels of nesting // ...
 // Detect a critical error if (/* error condition */) { goto error_handler; }
 // Continue normal code flow
 error_handler: // Code to handle errors printf("Error handler enabled.\n"); // Error handling and correction actions return 0;}

Use case in robotic systems or controllers.

Robots, having sensors as their "eyes", need to react immediately to failures in those sensors. If something goes wrong, you might want to use GOTO to send the flow to the error handler to recalibrate sensors or shut down the system safely.

Similarly, in a hardware controller, such as a keyboard, a GOTO could lead to the execution of a fault handling block as soon as a malfunction is detected.

Final considerations on GOTO

Although GOTO has its uses in cases of specific emergencies where an immediate and direct output is required, it is crucial to understand that its implementation must be careful and restricted. Keeping its uses to exceptional situations will help ensure that programs are as clear and efficient as possible.

Programming in C, as in many other languages, benefits greatly from a structured and logical approach. The GOTO statement, while potentially useful, should be viewed more as a last resort than as a regular solution. As a learning strategy, it is important to become familiar with this statement, but it is always best to explore other alternatives first. Keep learning and refining your programming technique to build clean and efficient code!

Contributions 21

Questions 1

Sort by:

Want to see more contributions, questions and answers from the community?

En el libro de Algoritmos a fondo con implementaciones en C y Java, escrito por el Ing. Pablo Augusto Sznajdleder.
Dice, la estructura “ir a” o, en inglés, “go to” o “goto”. Esta estructura quedó descartada luego de que el
teorema de la programación estructurada demostrara que con una adecuada combinación
de las**_ tres estructuras de control **(secuenciales, selectivas e iterativas. Las que estudiamos en este curso) es posible resolver cualquier algoritmo sin tener que recurrir al **“goto”_** (o estructura “ir a”). Esta estructura se quedó en desuso porque trae grandes problemas de mantenibilidad.

Esta instrucción goto seguramente sea algo heredado de otros lenguajes más antiguos. El lenguaje **C ** que se basa en un paradigma de programación estructurada.
Es más avanzado a la programación secuencial porque tiene funciones que rompe la continuidad, por la existencia de return, los bucles con el continue, y break. Elgoto` es algo que puede saltar a otro lugar del código que puede ser curioso… no lo he probado pero que tal y si pongo la etiqueta dentro de un bucle y este no tiene inicializadas las condiciones… En fin no quiero romperme la cabeza, solo le pido al compilador que ante semejante aberración chille, llore, berrée o te saque del programa de forma abrupta, a ser posible sin guardar el programa.

En el minuto 5:20 me parecio haber escuchado que este era el super poder de goku.

la instruccion goto te lleva a una linea especifica en el programa, pero usarlo se puede caer en malas practicas

Goto : El iniciador del llamado "Código Spaguetti"
aquel código que necesitas a un genio para poder entenderlo.

por que me menosprecia a mi goto XD

Haciendo este ejercicio me da una idea del uso que le puedo dar.

#include <stdio.h>

int main(int argc, const char* argv[])
{
    int nAdvertencias = 0;

    restart:

        if(nAdvertencias == 3)
            goto errorHandler;

        int count=1000;

        for (size_t i = 0; i < count; i++)
        {
            for (size_t j = 0; j < count; j++)
            {
                for (size_t k = 0; k < count; k++)
                {
                    if (k>100)
                    {
                        printf("\nHas sobrepasado el numero de iteraciones permitidas\n");
                        nAdvertencias++;
                        printf("Advertencia: %d\n", nAdvertencias);
                        goto restart;
                    }
                }
            }
            printf("%d\n", i);
        }

        return 0;

    errorHandler: //todo el codigo para componer tu desastre
        printf("\nHas sobrepasado 3 veces el numero de iteraciones permitidas");

    return 0;
}

goto
Es la comando que te lleva a una linea especifica en el programa, pero usarlo se puede caer en malas practicas

que diferencia hay entre try catch y goto?
los dos son para errores?

La instrucción de salto goto se puede usar en un programa, para transferir incondicionalmente el control del mismo a la primera instrucción después de una etiqueta, o dicho de otra forma, al ejecutar una instrucción goto, el control del programa se transfiere (salta) a la primera instrucción después de una etiqueta. Una etiqueta se define mediante su nombre (identificador) seguido del carácter dos puntos (😃.

goto label;

Único caso de uso recomendable para goto:

  • En bucles anidados al darse una condicion de salida directa desde un bucle interno a afuera del bucle principal (nivel superior)

goto es igual al ‘codigo spaeguetti’

La instruccion GOTO se usa ampliamente en la programacion de codigo G para CNC.

Para reutilizar segemento de codigo no sería mejor usar funciones.

Instrucción altamente abusable.

Si intrucción goto, se encuentra en desuso porque causa problemas de operavilidad y es una mala practica de los estudiantes.

yo las he usado en Assembler para microcontroladores PICS

#include <stdio.h>

int main(int argc, char const *argv[])
{

    printf("Contando del 1 al 10:\n");

    int i = 1;

    contar:
    printf("%d\n", i);
    i++;
    if (i <= 10)
        goto contar;
    
    printf("Terminamos\n");

    return 0;
}

El go to está presente en muchos códigos spaguetti.

Recuerdo en el lenguaje BASIC se usaba bastante con las condiciones