Kurs starten

**** GOSUB ... RETURN ****

GOSUB und RETURN: Unterprogramme

GOSUB springt wie GOTO, merkt sich aber, woher es kam. RETURN bringt das Programm genau dorthin zurück.

Schreibweise

FormBedeutung
GOSUB 100Ruft das Unterprogramm ab Zeile 100 auf.
RETURNKehrt hinter den letzten GOSUB-Aufruf zurück.
ON X GOSUB 100,200Ruft je nach Wert von X ein anderes Unterprogramm auf.

Der Unterschied zu GOTO

GOTO springt und vergisst. GOSUB legt die Rücksprungstelle auf einen Stapel, und RETURN holt sie wieder hervor. Deshalb kann dasselbe Unterprogramm von vielen Stellen aufgerufen werden und findet jedes Mal richtig zurück.

Hin und zurück 10 PRINT "START" 20 GOSUB 100 30 PRINT "ENDE" 40 END 100 PRINT "IM UNTERPROGRAMM" 110 RETURN START IM UNTERPROGRAMM ENDE

END nicht vergessen

Unterprogramme stehen üblicherweise am Ende des Listings, oft ab Zeile 100 oder 1000. Ohne ein END davor läuft das Hauptprogramm nach der letzten regulären Zeile einfach in das Unterprogramm hinein. Beim RETURN fehlt dann der passende Aufruf und BASIC meldet einen Fehler.

Denselben Baustein mehrfach nutzen 10 GOSUB 100 20 PRINT "MITTE" 30 GOSUB 100 40 END 100 PRINT "*****" 110 RETURN ***** MITTE *****

Die Trennlinie steht nur einmal im Listing, wird aber zweimal benutzt.

Werte übergeben

BASIC V2 kennt keine Parameter. Man setzt vor dem Aufruf einfach eine Variable, das Unterprogramm liest sie aus. Alle Variablen sind global, es gibt keine lokalen.

Übergabe per Variable 10 N=3 20 GOSUB 100 30 N=6 40 GOSUB 100 50 END 100 FOR I=1 TO N 110 PRINT "*"; 120 NEXT 130 PRINT 140 RETURN *** ******

Das Unterprogramm zeichnet so viele Sterne, wie in N stehen.

Typische Stolperfallen

RETURN ohne GOSUB

Der ?RETURN WITHOUT GOSUB ERROR bedeutet fast immer: Das Hauptprogramm ist versehentlich in das Unterprogramm hineingelaufen, weil davor das END fehlt.

Unterprogramm mit GOTO verlassen

Wer ein Unterprogramm per GOTO verlässt, lässt die Rücksprungstelle auf dem Stapel liegen. In langen Programmen führt das irgendwann zum Absturz. Verlasse ein Unterprogramm immer über RETURN.

Variablen überschreiben

Benutzt das Unterprogramm dieselbe Zählvariable wie das Hauptprogramm, gerät dessen Schleife durcheinander. Reserviere eigene Namen für Unterprogramme.

Passt dazu

Im Kurs lernst du GOSUB ... RETURN in Lektion 14: GOSUB und RETURN. Die vollständige Referenz aller Befehle steht im Befehls-Lexikon.

HAEUFIGE FRAGEN

Fragen zu GOSUB ... RETURN

Wie übergebe ich Werte an ein Unterprogramm?

Über normale Variablen: vor dem GOSUB setzen, im Unterprogramm auslesen. Parameter wie in moderneren Sprachen gibt es in BASIC V2 nicht.

Wie tief darf ich GOSUB verschachteln?

Ein Unterprogramm darf ein weiteres aufrufen. Auf dem echten C64 war der Stapel auf etwa zwei Dutzend Ebenen begrenzt, in der Praxis reicht das für jedes BASIC-Programm.

Gleich selbst ausprobieren

Tippe die Beispiele in den freien Editor und sieh dir an, was passiert.

Freien Editor oeffnen →