|  | 6.8 Goto-Anweisung 
 Die Goto-Anweisung (goto_statement 
      <BNF>) ist eine allgemeine Sprunganweisung, mit der man nicht 
      nur Schleifen verlassen, sondern auch an andere Stellen eines Ada-Programmes 
      verzweigen kann.
 
 goto Name_Sprungmarke;
 ...
 <<Name_Sprungmarke>>
 ...
 
 Argument einer Goto-Anweisung ist der Name einer Sprungmarke, die vor der Anweisung 
(Zielanweisung) stehen muß, zu der gesprungen werden soll.
 Die Programmausführung wird anschließend mit der Zielanweisung fortgesetzt.
 
 In Ada gelten folgende Regeln für die Implementierung von Goto-Anweisungen:
 
Beispiel:Die Stelle, zu der mit "goto" gesprungen wird, muß dem gleichen oder 
einem höheren Programmlevel angehören wie die Stelle, wo sich das "goto" 
befindet. So darf z. B. aus dem Then-Teil einer If-Anweisung an den Anfang der If-Anweisung 
gesprungen werden, aber nicht vom Anfang der If-Anweisung in den Then-Teil.
 
 
Es darf nicht aus der Anweisungsfolge eines "accept" herausgesprungen werden.Wenn eine Goto-Anweisung in einer Accept-Anweisung enthalten ist, darf die Zielanweisung 
nicht außerhalb der Accept-Anweisung liegen.
 
 
Wenn eine Goto-Anweisung in einem Rumpf (eines Unterprogramms, Paketes, Prozesses 
oder geschützten Typs) enthalten ist, darf die Zielanweisung nicht außerhalb 
des Rumpfes liegen. 
 
Sprünge zwischen den Alternativen einer If-Anweisung, Case-Anweisung, 
Select-Anweisung oder eines Ausnahmebehandlers sind nicht erlaubt.
 
Aus der Anweisungsfolge eines Ausnahmebehandlers darf nicht in die Anweisungsfolge, 
die diese Ausnahme ausgelöst hat, zurückgesprungen werden.
 
Es darf nur an den Anfang einer Steueranweisung (If-, Case-, Loop- oder Accept-Anweisung) 
gesprungen werden.
 
Es darf nicht in den Rumpf eines Unterprogrammes, Paketes, Prozesses oder 
geschützten Typs hineingesprungen werden. 
 -- goto-Lösung
 
 Sprung aus dem Then-Teil einer If-Anweisung vor die For-Schleife mit goto
 
 
 
 
| <<SORTIERE>> -- Sprungmarke for I in 1..ZAHL_ELEMENTE-1 loop
 if A(I) > A(I+1) then
 VERTAUSCHE(A(I), A(I+1));
 goto SORTIERE; -- Verzweigen 
            zu <<SORTIERE>>
 end if;
 end loop;
 |  -- Lösung ohne goto
 
 Entsprechender Programmablauf ohne Goto-Anweisung
 
 
 
| I:=1; while I <= ZAHL_ELEMENTE - 1 loop
 if A(I) > A(I+1) then
 VERTAUSCHE(A(I), A(I+1));
 I:=1;
 else
 I:=I+1;
 end if;
 end loop;
 |  Auf die Verwendung von Goto-Anweisungen sollte nach Möglichkeit verzichtet 
      werden, da sich der Programmablauf ohne "goto" transparenter gestalten 
      läßt und das Programm besser lesbar und wartbar ist.
 
 
 
 |