De gotoverklaring
C heeft een gotoverklaring die toelaat dat ongestructureerde sprongen worden gemaakt. Om een gotoverklaring te gebruiken, gebruikt u eenvoudig gereserveerde woordgoto die door de symbolische naam wordt gevolgd waaraan u om wenst te springen. De naam wordt dan overal in het programma geplaatst dat door een dubbelpunt wordt gevolgd. U kunt bijna overal binnen een functie springen, maar u wordt niet toegelaten om in een lijn te springen, hoewel u uit een lijn mag springen.
Dit bepaalde programma is werkelijk knoeit maar het is een goed voorbeeld van waarom de softwareschrijvers proberen om het gebruik van de gotoverklaring te elimineren zo veel mogelijk. De enige plaats in dit programma waar het redelijk is om goto te gebruiken is, waar het programma uit de drie genestelde lijnen in één sprong springt. In dit geval zou het eerder slordig zijn om een variabele op te zetten en opeenvolgend uit elk van de drie genestelde lijnen te springen maar één gotoverklaring krijgt u uit alle drie op een zeer beknopte manier.
Sommige personen zeggen de gotoverklaring nooit in om het even welke omstandigheden zou moeten worden gebruikt, maar dit is het smalle gelete op denken. Als er een plaats is waar een goto duidelijk een keurigere controlestroom dan één of ander ander concept zal doen, vrij voelen om het te gebruiken, echter, aangezien het in de rest van het programma over uw monitor is. Zie het voorbeeld:
#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");
/* dit is het eind van de sectie met een bruikbare gotoverklaring */
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;
}
Zie de getoonde resultaten
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. |
|