Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - GOTO und GOSUB

Referenz-Navigation

 

Mit den beiden Befehlen BefehlsreferenzeintragGOTO und BefehlsreferenzeintragGOSUB wurden in älteren BASIC-Dialekten Prozeduren erstellt. Es ist theoretisch möglich, einer GOTO/GOSUB-Prozedur Parameter zu übergeben. Dazu müssten (zusätzliche) Variablen deklariert werden, die dann nur in der Prozedur benutzt werden. Auch durch diesen erhöhten Programmieraufwand werden die Unterprogramme leicht unübersichtlich. GOTO und GOSUB sind daher unter Programmierern nicht sonderlich gerne gesehen; der Vollständigkeit halber seien sie jedoch dennoch hier aufgeführt.

GOTO
GOTO "springt" an einen bestimmten Punkt innerhalb des Programms, der sowohl vor als auch hinter der BefehlsreferenzeintragGOTO-Anweisung liegen kann. Die Ausführung des Programms wird dann von dieser Stelle ab fortgesetzt. Der Einsprungpunkt wird durch ein sogenanntes Label markiert. Ein Label ist ein beliebiger Bezeichner, gefolgt von einem Doppelpunkt. In den Dialektformen Befehlsreferenzeintrag-lang qb, -lang deprecated und -lang fblite kann als Label auch eine Zahl verwendet werden.

#Lang "qb"
10 PRINT "hello World"
MyLabel:
PRINT "eine zweite Anweisung"

Das Programm merkt sich nicht, von welcher Stelle aus der Sprung durchgeführt wurde. Soll später wieder zurückgesprungen werden, dann muss dieser Rücksprung "manuell" durchgeführt werden, d. h. eine weitere GOTO-Zeile muss das Programm wieder dorthin zurückspringen lassen, von wo es aufgerufen wurde.

Beispiel:

z1: GOTO z4
z2: PRINT "Ciao"
z3: GOTO ende
z4: PRINT "Welcome!"
z5: GOTO z2

ende:
END

Das obige Beispiel ist nicht besonders sinnvoll, sondern soll lediglich das Verhalten des Befehls GOTO demonstrieren. Eingesetzt werden kann GOTO z. B. dann, wenn bestimmte Programmteile unter gewissen Voraussetzungen übersprungen werden sollen oder wenn umgekehrt ein bereits ausgeführter Programmteil nochmal durchlaufen werden soll. Mit GOTO ist es jedoch sehr leicht, sogenannten Externer Link!Spaghetticode zu erzeugen, der sich nur noch schwer warten lässt. Daher sollte man in der Regel versuchen, den Befehl zu vermeiden.

GOTO kann fast immer durch andere Programmstrukturen ersetzt werden. Mit BefehlsreferenzeintragBedingungsstrukturen wie BefehlsreferenzeintragIF ... THEN und BefehlsreferenzeintragSELECT CASE können auch große Programmteile unter bestimmten Bedingungen übersprungen werden, während BefehlsreferenzeintragSchleifen die mehrfache Ausführung eines Programmabschnitts ermöglichen.


GOSUB
GOSUB springt ähnlich wie GOTO zu einem Label im Programm, merkt sich jedoch die Stelle, von der aus das GOSUB durchgeführt wurde. Sobald das Programm auf die Anweisung BefehlsreferenzeintragRETURN stößt, führt es einen Rücksprung aus. Der Befehl arbeitet damit sehr ähnlich wie eine BefehlsreferenzeintragProzedur, nur dass eventuell benötigte Parameter "manuell" übergeben werden müssen. Da GOSUB fast vollständig durch Prozeduren ersetzt werden kann, steht es in der Dialektform -lang fb nicht mehr zur Verfügung.

Beispiel:

#Lang "qb"
GOSUB message
END

message:
PRINT "Welcome!"
RETURN

Das Programm benötigt für jeden GOSUB-Aufruf Speicherplatz, um sich die Rücksprungadresse zu merken. Dieser Speicherplatz wird nach dem RETURN wieder freigegeben. Beenden Sie daher einen mit GOSUB ausgeführten Sprung immer mit RETURN, um einen Speicherüberlauf zu vermeiden.


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 06.08.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 12.01.2013 von Redakteurnemored gespeichert.
  Versionen Versionen