La declaración goto
C tiene una declaración goto que permita que los saltos no estructurados sean hechos. Para utilizar una declaración goto, utilizas simplemente el goto reservado de la palabra seguido por el nombre simbólico a el cual deseas saltar. El nombre entonces se pone dondequiera en el programa seguido por dos puntos. Puedes saltar casi dondequiera dentro de una función, pero te no permiten para saltar en un lazo, aunque a te se permite saltar de un lazo.
Este programa particular es realmente un lío pero es un buen ejemplo de porqué los escritores del software están intentando eliminar el uso de la declaración goto tanto cuanto sea posible. El único lugar en este programa donde está razonable utilizar el goto está, donde el programa salta de los tres lazos jerarquizados en un salto. En este caso sería algo sucio instalar una variable y saltar sucesivamente de cada uno de los tres lazos jerarquizados pero una declaración goto te consigue de los tres de una manera muy sucinta.
Algunas personas dicen que la declaración goto se debe nunca utilizar bajo cualquier circunstancia, pero éste es pensamiento importado estrecho. Si hay un lugar en donde una voluntad goto hace claramente un flujo más aseado del control que una cierta otra construcción, sensación libre utilizarla, sin embargo, como está en el resto del programa sobre tu monitor. Veamos el ejemplo:
#include <stdio.h>
int main()
{
int dog, cat, pig;
goto real_start;
some_where:
printf("This is another line of the mess.\n");
goto stop_it;
/* the following section is the only section with a useable goto */
real_start:
for(dog = 1 ; dog < 6 ; dog = dog + 1)
{
for(cat = 1 ; cat < 6 ; cat = cat + 1)
{
for(pig = 1 ; pig < 4 ; pig = pig + 1)
{
printf("Dog = %d Cat = %d Pig = %d\n", dog, cat, pig);
if ((dog + cat + pig) > 8 ) goto enough;
}
}
}
enough: printf("Those are enough animals for now.\n");
/* this is the end of the section with a useable goto statement */
printf("\nThis is the first line of the code.\n");
goto there;
where:
printf("This is the third line of the code.\n");
goto some_where;
there:
printf("This is the second line of the code.\n");
goto where;
stop_it:
printf("This is the last line of this mess.\n");
return 0;
}
Veamos los resultados exhibidos
Dog = 1 Cat = 1 Pig = 1
Dog = 1 Cat = 1 Pig = 2
Dog = 1 Cat = 1 Pig = 3
Dog = 1 Cat = 2 Pig = 1
Dog = 1 Cat = 2 Pig = 2
Dog = 1 Cat = 2 Pig = 3
Dog = 1 Cat = 3 Pig = 1
Dog = 1 Cat = 3 Pig = 2
Dog = 1 Cat = 3 Pig = 3
Dog = 1 Cat = 4 Pig = 1
Dog = 1 Cat = 4 Pig = 2
Dog = 1 Cat = 4 Pig = 3
Dog = 1 Cat = 5 Pig = 1
Dog = 1 Cat = 5 Pig = 2
Dog = 1 Cat = 5 Pig = 3
Those are enough animals for now.
This is the first line of the code.
This is the second line of the code.
This is the third line of the code.
This is another line of the mess.
This is the last line of this mess. |
|