Im folgenden wird zunächst auf die Ablaufsteuerung und auf mögliche Darstellungsmittel eingegangen. Benutzt wird zum einen die Struktogrammtechnik, zum anderen werden die Ausdrucksmittel wichtiger prozeduraler Sprachen wie Ada, ALGOL, BASIC, C, COBOL, Fortran, Modula-2, PL1 und Pascal angegeben. Bei den sprachbezogenen Angaben sind unterschiedliche Dialekte und Sprachversionen zu beachten. Dies betrifft vor allem BASIC, aber auch COBOL, FORTRAN und Pascal.
Für die syntaktische Darstellung von Kommentaren gilt:

<anweisung> kann substituiert werden durch
Ada
x := x+1; { Wertzuweisung }
y := Sin(x); { Funktionsaufruf }
up(x,y,z); { Unterprogrammaufruf }
ALGOL 60, Simula
x := x+1; ! Wertzuweisung
y := Sin(x); ! Funktionsaufruf
up(x,y,z); ! Unterprogrammaufruf
BASIC
LET x = x + 1 ! Wertzuweisung
LET y = Sin(x) ! Funktionsaufruf
CALL up(x,y,z) ! Unterprogrammaufruf
C, C++, Java
x = x + 1; /* oder: x++; */
y = Sin(x);
up(x,y,z);
COBOL
ADD 1 TO x
PERFORM up
Fortran
x = x+1 ! Wertzuweisung
y = Sin(x) ! Funktionsaufruf
CALL up(x,y,z) ! Unterprogrammaufruf
Modula-2, Oberon-2
x := x+1; (* Wertzuweisung *)
y := Sin(x); (* Funktionsaufruf *)
up(x,y,z); (* Unterprogrammaufruf *)
Pascal
x := x+1; { Wertzuweisung }
y := Sin(x); { Funktionsaufruf }
up(x,y,z); { Unterprogrammaufruf }
PL1
x = x + 1;
y = Sin(x);
up(x,y,z);
Verbundanweisung
In einer Reihe von (vor allem älteren) Sprachen darf nach bestimmten
syntaktischen Konstruktionen (z.B. THEN, ELSE, DO) nur eine einzige
Anweisung stehen. Das Einfügen von Anweisungsfolgen an dieser Stelle
ist dann mit Hilfe von sogenannten Verbundanweisungen möglich:
Die Anweisungsfolge wird mit Hilfe spezieller Sprachsymbole
eingeklammert und gilt dann syntaktisch wie eine einzige Anweisung.
Ada, BASIC, Fortran, Modula-2, Oberon-2
nicht erforderlich
C, C++, Java
{ anweisung_1; ... anweisung_n; }
Pascal, ALGOL-60, Simula
BEGIN anweisung_1; ... anweisung_n; END
PL1
DO; anweisung_1; ... anweisung_n; END;
Vereinfachung der Verwendung mehrstufiger BezeichnerIn einer Reihe von Sprachen werden mehrstufige Bezeichner gebildet, z.B. bei der Arbeit mit Datenstrukturen (Records) oder mit Objekten:
datensatz.komponente objekt.komponenteUm die häufige Angabe der vorderen Namensstufen vermeiden zu können, kann für eine Folge von Anweisungen festgelegt werden, daß nichtidentifizierbare Bezeichner automatisch um solche Namensstufen ergänzt werden.
Oberon-2
WITH heute: datum DO
Writeln(tag, monat, jahr)
END;
WITH
figur: rectangle DO
draw_rectangle(x1, y1, x2, y2)
| figur: circle DO
draw_circle(xm, ym, r)
END;
Pascal
WITH heute DO
Writeln(tag, monat, jahr);
anstelle von
Writeln(heute.tag, heute.monat, heute.jahr);
Sequentielle AbarbeitungAnweisungen werden in der Reihenfolge ausgeführt, wie notiert sind.
Zu beachten ist, daß unter bestimmten Umständen nicht alle
Anweisungen ausgeführt werden !
Dies ist z.B. beim Auftreten von Ausnahmesituationen (z.B. nicht aktives
Ein- oder Ausgabegerät, fehlende Zugriffsrechte, unzulässige
arithmetische Operation) der Fall.
In solchen Situationen erfolgen oft Verzweigungen. Diese werden entweder
explizit durch das Programm oder implizit durch das Laufzeitsystem der
Sprache veranlaßt.
Anschließend erfolgt die Programmfortsetzung an einer explizit
festgelegten Stelle oder eine automatische Programmfortsetzung mit dem
nächsten Befehl bzw. ein Programmabbruch.
Kollaterale und parallele Abarbeitung
Während bei einer sequentiellen Abarbeitung die Anweisungen in der
Reihenfolge ihrer Notation ausgeführt werden, bleibt die Reihenfolge
bei einer kollateralen Abarbeitung offen.
Dies setzt natürlich voraus, daß die entsprechenden Aktionen
unabhängig voneinander sind.
Es kann dann - automatisch - versucht werden, die Abarbeitung so zu
gestalten, daß sie "optimal" verläuft.
Als Spezialfall der kollateralen Abarbeitung kann die parallele Abarbeitung
aufgefaßt werden.
Die wenigsten der gegenwärtig verfügbaren Sprachen unterstützen entsprechende Beschreibungsmittel.
ALGOL 68
BEGIN aktion_1; aktion_2; ... aktion_n END sequentielle Abarb.
BEGIN aktion_1, aktion_2, ... aktion_n END kollaterale Abarb.
( aktion_1; aktion_2; ... aktion_n ) kollaterale Abarb.
PAR( aktion_1; aktion_2; ... aktion_n ) parallele Abarb.
OCCAM
PAR -- zwei Anweisungsblöcke können parallel ablaufen
SEQ -- Anweisungsblock 1 mit sequentieller Abarbeitung
aktion_11
aktion_12
SEQ -- Anweisungsblock 2 mit sequentieller Abarbeitung
aktion_21
aktion_22

In Abhängigkeit von der Auswertung der Bedingung werden alternative
Aktionen ausgeführt.
Die Formulierung komplexer Bedingungen ist im allgemeinen möglich.
Pseudocode
IF bedingung THEN
anweisungsfolge_1
ELSE
anweisungsfolge_2
END IF
Ada
IF bezahlt THEN
ausliefern;
ELSE
mahnung;
END IF;
ALGOL-60, Simula
IF bezahlt THEN
ausliefern ! einzelne Anweisung oder Verbundanweisung
ELSE
mahnung; ! einzelne Anweisung oder Verbundanweisung
ALGOL-68
IF bezahlt THEN
ausliefern;
ELSE
mahnung;
FI;
oder
( bezahlt | ausliefern | mahnung )
BASIC
IF bezahlt = 1 THEN
CALL ausliefern
ELSE
CALL mahnung
END IF
C, C++, Java
if ( bezahlt )
ausliefern(); /* einzelne Anweisung oder Verbundanweisung */
else
mahnung(); /* einzelne Anweisung oder Verbundanweisung */
COBOL 85
IF bezahlt
PERFORM ausliefern
ELSE
PERFORM mahnung
END-IF
Fortran
IF ( bezahlt ) THEN
CALL ausliefern
ELSE
CALL mahnung
END IF
Modula-2, Oberon-2
IF bezahlt THEN
ausliefern;
ELSE
mahnung;
END;
Pascal
IF bezahlt THEN
ausliefern { einzelne Anweisung oder Verbundanweisung }
ELSE
mahnung; { einzelne Anweisung oder Verbundanweisung }
PL1
IF bezahlt THEN
CALL ausliefern; /* einzelne Anweisung oder Verbundanweisung */
ELSE
CALL mahnung; /* einzelne Anweisung oder Verbundanweisung */

Im Unterschied zur vollständigen Alternative wird nur dann eine Aktion ausgeführt, wenn die Bedingung erfüllt ist.
Pseudocode
IF bedingung THEN
anweisungsfolge_1
END IF
Ada
IF ( preis < 500 ) AND ( konto >= preis ) THEN
bestellen;
END IF;
ALGOL-60, Simula
IF preis < 500 AND konto >= preis THEN
bestellen; ! einzelne Anweisung oder Verbundanweisung
ALGOL-68
IF preis < 500 AND konto >= preis THEN
bestellen
FI;
BASIC
IF preis < 500 AND konto >= preis THEN
CALL bestellen
END IF
C, C++, Java
if (( preis < 500 ) && ( konto >= preis ))
bestellen(); /* einzelne Anweisung oder Verbundanweisung */
COBOL
IF preis IS LESS THAN 500
AND konto IS GREATER THAN OR EQUAL TO preis
PERFORM bestellen
END-IF
oder
IF preis < 500 AND konto >= preis
PERFORM bestellen
END-IF
Fortran
IF ( ( preis .LT. 500 ) .AND. ( konto .GE. preis ) ) THEN
CALL bestellen
END IF
Modula-2, Oberon-2
IF ( preis < 500 ) AND ( konto >= preis ) THEN
bestellen;
END;
Pascal
IF ( preis < 500 ) AND ( konto >= preis ) THEN
bestellen; { einzelne Anweisung oder Verbundanweisung }
PL1
IF ( preis < 500 ) & ( konto >= preis ) THEN
CALL bestellen; /* einzelne Anweisung oder Verbundanweisung */

Bei der Fallauswahl handelt es sich um eine Mehrfachverzweigung, die auch über eine Folge von ineinandergeschachtelten vollständigen Alternativen dargestellt werden kann. Um eine bessere Lesbarkeit zu erreichen, enthalten viele Programmiersprachen jedoch eigene Ausdrucksmittel. Die Verzweigung erfolgt in Abhängigkeit von dem Wert, der sich durch Auswertung des Ausdrucks ergibt.
Pseudocode
SELECT ausdruck
CASE fall_1: anweisungsfolge_1
CASE fall_2: anweisungsfolge_2
...
ELSE anweisungsfolge_n
END SELECT
Ada
CASE wochentag IS
WHEN samstag => feiern;
WHEN sonntag => ausruhen;
WHEN OTHERS => arbeiten;
END CASE;
ALGOL-60, Simula
Keine besonderen Sprachmittel verfügbar
BASIC
SELECT CASE wochentag
CASE samstag
CALL feiern
CASE sonntag
CALL ausruhen
CASE ELSE
CALL arbeiten
END SELECT
C, C++, Java
switch ( wochentag ) {
case samstag: feiern(); break;
case sonntag: ausruhen(); break;
default: arbeiten();
}
COBOL 85
EVALUATE wochentag
WHEN samstag
PERFORM feiern
WHEN sonntag
PERFORM ausruhen
WHEN OTHER
PERFORM arbeiten
END-EVALUATE
Fortran
SELECT CASE ( wochentag ) ! nicht in FORTRAN 77
CASE ( samstag )
CALL feiern
CASE ( sonntag )
CALL ausruhen
CASE DEFAULT
CALL arbeiten
END SELECT
Modula-2, Oberon-2
CASE wochentag OF
samstag: feiern;
| sonntag: ausruhen;
ELSE arbeiten;
END;
Pascal
CASE wochentag OF
samstag: feiern;
sonntag: ausruhen;
OTHERWISE arbeiten; { Extended Pascal }
END;
PL1
Keine besonderen Sprachmittel verfügbar
Bei der Realisierung einer derartigen Fallauswahl in Programmiersprachen
wird oft gefordert, daß der Ausdruck einen Wert liefert, der zu einem
ordinalen Datentyp gehört. Für die Situationen, in denen sich die Selektionsbedingung nicht auf einen einfachen Ausdruck reduzieren läßt, gibt es in einer Reihe von Sprachen spezielle Ausdrucksmittel (meist Spezialformen der IF-THEN-ELSE-Anweisung).
Pseudocode
IF bedingung_1 THEN
anweisungsfolge_1
ELSIF bedingung_2 THEN
anweisungsfolge_2
...
ELSE
anweisungsfolge_n
END IF
Ada
IF (wochentag = samstag) AND ( konto > minimum ) THEN
feiern;
ELSIF (wochentag = sonntag) AND ( konto > minimum ) THEN
ausruhen;
ELSE
arbeiten;
END IF;
ALGOL-60, Simula
IF wochentag = samstag AND konto > minimum THEN
feiern
ELSE IF wochentag = sonntag AND konto > minimum THEN
ausruhen
ELSE
arbeiten;
BASIC
IF wochentag = samstag AND konto > minimum THEN
CALL feiern
ELSEIF wochentag = sonntag AND konto > minimum THEN
CALL ausruhen
ELSE
CALL arbeiten
END IF
C, C++, Java
if ((wochentag == samstag) && ( konto > minimum ))
feiern();
else if ((wochentag == sonntag) && ( konto > minimum ))
ausruhen();
else
arbeiten();
COBOL 85
EVALUATE TRUE
WHEN wochentag = samstag AND konto > minimum
PERFORM feiern
WHEN wochentag = sonntag AND konto > minimum
PERFORM ausruhen
WHEN OTHER
PERFORM arbeiten
END-EVALUATE
Fortran
IF ((wochentag .EQ. samstag) .AND. ( konto .GT. minimum )) THEN
CALL feiern
ELSE IF((wochentag .EQ. sonntag) .AND. ( konto .GT. minimum )) THEN
CALL ausruhen
ELSE
CALL arbeiten
END IF
Modula-2, Oberon-2
IF (wochentag = samstag) AND ( konto > minimum ) THEN
feiern;
ELSIF (wochentag = sonntag) AND ( konto > minimum ) THEN
ausruhen;
ELSE
arbeiten;
END;
Pascal
IF (wochentag = samstag) AND ( konto > minimum ) THEN
feiern
ELSE IF (wochentag = sonntag) AND ( konto > minimum ) THEN
ausruhen
ELSE
arbeiten;
PL1
IF (wochentag = samstag) & ( konto > minimum ) THEN
CALL feiern
ELSE IF (wochentag = sonntag) & ( konto > minimum ) THEN
CALL ausruhen
ELSE
CALL arbeiten;
Ada
Ausnahmen: CONSTRAINT_ERROR, NUMERIC_ERROR, PROGRAM_ERROR,
STORAGE_ERROR, TASKING_ERROR
STATUS_ERROR, MODE_ERROR, NAME_ERROR, USE_ERROR,
DEVICE_ERROR, END_ERROR, DATA_ERROR
BEGIN
anweisungsfolge...
EXCEPTION
WHEN NUMERIC_ERROR =>
Put("...");
WHEN OTHERS =>
Put("...");
END;
C, C++
Viele Standardfunktionen liefern Rückkehrcodes, die auswertbar
sind
COBOL 85
ADD wert1 wert2 GIVING ergebnis
ON SIZE ERROR DISPLAY "Additionsfehler"
END-ADD
Fortran
Ausnahmebehandlung bei Ein- und Ausgabeoperationen (einschließlich
Dateiarbeit) ist im Sprachstandard (ab FORTRAN 77) vorgesehen
READ(*,*,IOSTAT=io) n
IF ( io .NE. 0 ) THEN
WRITE(*,*) 'Eingabefehler'
END IF
PL1
Unterschieden werden vier Gruppen von Unterbrechungsbedingungen:
- Berechnungsbedingungen
CONVERSION Versuch einer nicht erlaubten Konvertierung
FIXEDOVERFLOW Wertebereichsüberschreitung bei Festpunktoperation
OVERFLOW Exponent wird bei Gleitpunktoperation zu groß
UNDERFLOW Exponent wird bei Gleitpunktoperation zu klein
ZERODIVIDE Division durch Null
SIZE Verlust signifikanter Stellen
- Ein- und Ausgabebedingungen
ENDFILE Dateiende bei sequentiellem Lesen erreicht
ENDPAGE Überschreiten der Seitenbegrenzung bei Ausgabe
RECORD Fehler bei satzweiser Ein- oder Ausgabe
- Programmprüfungsbedingungen
- sonstige Unterbrechungen
Beispiel:
ON ZERODIVIDE CALL error(0);

Es wird eine Wiederholbedingung formuliert. Der Anweisungsteil wird solange ausgeführt, wie diese Bedingung erfüllt ist. Auf Grund der Position der Bedingung kann es auftreten, daß der Anweisungsteil der Iteration völlig übergangen wird.
Pseudocode
WHILE bedingung DO
anweisungsfolge
END WHILE
Ada
WHILE konto > minimum LOOP
bestellen;
END LOOP;
ALGOL-60, Simula
WHILE konto > minimum DO ! nur Simula
bestellen;
FOR p:=q WHILE Abs(q) >= eps DO
q := p*p;
BASIC
DO WHILE konto > minimum oder DO UNTIL konto <= minimum
CALL bestellen CALL bestellen
LOOP LOOP
C, C++, Java
while ( konto > minimum )
bestellen();
COBOL
PERFORM WITH TEST BEFORE UNTIL konto <= minimum
...
END-PERFORM
Fortran
DO WHILE ( konto .GT. minimum )
CALL bestellen
END DO
Modula-2, Oberon-2
WHILE konto > minimum DO
bestellen;
END;
Pascal
WHILE konto > minimum DO
bestellen;
PL1
DO WHILE ( konto > minimum );
CALL bestellen;
END;

Es wird eine Abbruchbedingung formuliert. Der Anweisungsteil wird solange
ausgeführt, bis diese Bedingung erfüllt ist. Auf Grund der Position
der Bedingung wird der Anweisungsteil der Iteration immer mindestens einmal
ausgeführt.
Meist wird die Bedingung als Abbruchbedingung formuliert, mitunter ist
jedoch auch eine Wiederholbedingung anzugeben.
Pseudocode
REPEAT
anweisungsfolge
UNTIL bedingung
Ada
LOOP
bestellen;
EXIT WHEN konto < minimum;
END LOOP;
ALGOL-60, Simula
Keine besonderen Sprachmittel verfügbar
BASIC
DO oder DO
CALL bestellen CALL bestellen
LOOP UNTIL konto < minimum LOOP WHILE konto >= minimum
C, C++, Java
do
bestellen();
while ( konto >= minimum );
COBOL
PERFORM WITH TEST AFTER UNTIL konto < minimum
...
END-PERFORM
Fortran
DO ! FORTRAN 90
CALL bestellen
IF ( konto .LT. minimum ) EXIT
END DO
Modula-2, Oberon-2
REPEAT
bestellen;
UNTIL konto < minimum;
Pascal
REPEAT
bestellen;
UNTIL konto < minimum;

Es wird eine Austrittsbedingung formuliert: Der Zyklus wird beendet, wenn
die Austrittsbedingung erfüllt ist.
Während der erste Anweisungsteil wird immer mindestens einmal
ausgeführt wird, muß dies für den zweiten Anweisungsteil
nicht gelten.
Pseudocode
LOOP
anweisungsfolge_1
WHEN bedingung THEN EXIT
anweisungsfolge_2
END LOOP
Ada
LOOP
bestellen_1;
EXIT WHEN rechnungsbetrag > maximum;
bestellen_2;
END LOOP;
ALGOL-60, Simula
Keine besonderen Sprachmittel verfügbar
BASIC
DO
CALL bestellen_1
IF rechnungsbetrag > maximum THEN EXIT DO
CALL bestellen_2
LOOP
C, C++, Java
for(;;) {
bestellen_1();
if ( rechnungsbetrag > maximum ) break;
bestellen_2();
}
Fortran
DO ! FORTRAN 90
CALL bestellen_1
IF ( rechnungsbetrag .GT. maximum ) EXIT
CALL bestellen_2
END DO
Modula-2, Oberon-2
LOOP
bestellen_1;
IF rechnungsbetrag > maximum THEN EXIT END;
bestellen_2;
END;
Turbo Pascal 7.0
WHILE ( TRUE ) DO BEGIN
bestellen_1;
IF rechnungsbetrag > maximum THEN Break;
bestellen_2;
END;

Es wird eine Auslassungsbedingung formuliert: Der Zyklus wird mit der
Abarbeitung von Anweisungsteil 1 fortgesetzt, Anweisungsteil 2 wird -
im aktuellen Wiederholungsschritt - ausgelassen.
Während der erste Anweisungsteil wird immer mindestens einmal
ausgeführt wird, muß dies für den zweiten Anweisungsteil
nicht gelten.
Für diesen Spezialfall stellen nur relativ wenige Sprachen gesonderte
Mittel bereit.
Pseudocode
LOOP
anweisungsfolge_1
WHEN bedingung THEN CONTINUE
anweisungsfolge_2
END LOOP
C, C++, Java
for(;;) {
bestellen_1();
if ( rechnungsbetrag > maximum ) continue;
bestellen_2();
}
Fortran
DO ! FORTRAN 90
CALL bestellen_1
IF ( rechnungsbetrag .GT. maximum ) CYCLE
CALL bestellen_2
END DO
Turbo Pascal 7.0
WHILE ( TRUE ) DO BEGIN
bestellen_1;
IF rechnungsbetrag > maximum THEN Continue;
bestellen_2;
END;
Pseudocode
FOR laufvariable:=anfangswert TO endwert STEP schrittweite DO
anweisungsfolge
END FOR
Ada
FOR i IN 1..n LOOP -- i = 1, 2, ..., n-1, n
kaufe(produkt(i));
END LOOP;
ALGOL-60, Simula
FOR i:=1 STEP 1 UNTIL n DO ! i = 1, 2, ..., n-1, n
kaufe(produkt[i]);
FOR i:=n STEP -1 UNTIL 1 DO ! i = n, n-1, ..., 2, 1
count_down(i);
FOR i:=1,3,7,15 DO ! i = 1, 3, 7, 15
do_something(i);
ALGOL-68
FOR i FROM 1 TO n DO ! i = 1, 2, ..., n-1, n
kaufe(produkt[i]);
FOR i FROM n BY -1 TO 1 DO ! i = n, n-1, ..., 2, 1
count_down(i);
BASIC
FOR i=1 TO n ! i = 1, 2, ..., n-1, n
CALL kaufe(produkt(i))
NEXT i
FOR i=n TO 1 STEP -1 ! i = n, n-1, ..., 2, 1
CALL count_down(i)
NEXT i
C, C++, Java
for ( i=1; i<=n; i++ ) /* i = 1, 2, ..., n-1, n */
kaufe(produkt[i]);
for ( i=n; i>=1; i-- ) /* i = n, n-1, ..., 2, 1 */
count_down(i);
COBOL 85
MOVE 0 TO i
PERFORM n TIMES
ADD 1 TO i
...
END-PERFORM
PERFORM WITH TEST BEFORE
VARYING i FROM n BY -1 UNTIL i = 0
...
END-PERFORM
Fortran
DO 1 i = 1,n ! i = 1, 2, ..., n-1, n
CALL kaufe(produkt(i))
1 CONTINUE
DO i = n,1,-1 ! i = n, n-1, ..., 2, 1
CALL count_down(i) ! Fortran 90
END DO
Modula-2, Oberon-2
FOR i := 1 TO n DO (* i = 1, 2, ..., n-1, n *)
kaufe(produkt[i]);
END;
FOR i := n TO 1 BY -1 DO (* i = n, n-1, ..., 2, 1 *)
count_down(i);
END;
Pascal
FOR i := 1 TO n DO { i = 1, 2, ..., n-1, n }
kaufe(produkt[i]);
FOR i := n DOWNTO 1 DO { i = n, n-1, ..., 2, 1 }
count_down(i);
PL1
DO i = 1 TO n; /* i = 1, 2, ..., n-1, n */
CALL kaufe(produkt[i]);
DO i := n TO 1 BY -1; /* i = n, n-1, ..., 2, 1 */
CALL count_down(i);
Anstelle des Datentyps Integer ist gegebenenfalls auch ein ordinaler
Datentyp möglich. Bei Verwendung eines reellen Datentyps - meistens ist
dies nicht zugelassen - ist auf die eventuelle Auswirkung von Rundungsfehlern
beim Aufsummieren der Schrittweite zu achten. Das Ziel einer Sprunganweisung kann immer nur eine Anweisung der gleichen Programmeinheit sein, die entsprechende Anweisung muß eine Marke (label) tragen.
Ada
GOTO marke; -- marke: Bezeichner
ALGOL-60, Simula
GOTO marke; ! marke: Bezeichner
BASIC
GOTO zeilennummer
C, C++
goto marke; /* marke: Bezeichner */
COBOL
GOTO marke;
Fortran
GOTO marke ! marke: maximal fünfstellige Ziffernfolge
Modula-2, Oberon-2, Java
ein GOTO-Befehl ist nicht verfügbar
Pascal
GOTO marke; { marke: zu deklarierender ganzzahliger Wert }
PL1
GOTO marke; /* marke: Bezeichner */
Ältere Sprachen lassen mitunter bedingte Sprunganweisungen zu. Zu
erkennen ist in diesen Sprachen noch die Nähe zur maschinennahen
Programmierung, die nicht zuletzt auch den damals sehr knappen Ressourcen
an Rechenzeit und Speicherplatz geschuldet ist.
ALGOL-60, Simula GOTO IF bedingung THEN marke1 ELSE marke2; SWITCH verteiler := marke_1, ..., marke_n; ... GOTO verteiler[i]; FORTRAN ASSIGN marke TO marken_var ... GOTO marken_varBemerkung: In einigen Sprachen vorhandene Befehle wie Break, Continue, Exit sind spezielle Formen des Sprungsbefehls, die jeweils an einen speziellen Einsatzzweck gebunden sind und damit eine bessere Lesbarkeit des Programms garantieren als ein undifferenziertes Goto.