|
![ein Kapitel weiter](../weiter.gif)
Der goto - Sprungbefehl wird heute von vielen Programmierern verpöhnt. Die Geschichte
von goto begann damit, weil es für die Programmiersprache C, keine genauen Zeilennummern,
wie in anderen Programmiersprachen gibt. Mit der goto - Labelanweisung konnte man nun
ein genaues Sprungziel festlegen. Es ist dabei egal ob das Sprungziel nach vorne oder nach
hinten im Programm verläuft. Einzige Bedienung dabei, die Sprunganweisungen und Marken
müssen in der selben Funktion liegen.
Nützlich kann goto sein um aus tief verschachtelten Schleifen oder als Reaktion von Programmfehlern , herauszuspringen.
Der Syntax für goto sieht folgendermaßen aus...
goto LABEL;
LABEL : Anweisung;
Mittels goto LABEL wird zur Marke LABEL gesprungen und dessen Anweisung ausgeführt. Hierzu nun ein Beispiel zu goto....
/*Download:goto1.c*/
#include <stdio.h>
int main() {
int x,y;
for(x=1; x<=640; x++){
for(y=1; y<=480; y++){
if(x==320 && y==240) {
printf("Mitte des des Bildschirms\n"); goto RAUS; } } } RAUS : printf("Bin raus aus der Schleife\n"); return 0; }
|
In diesem Beispiel laufen wir ein Feld von 640x480 bis zum Mittelpunkt durch und springen anschließend aus der inneren Schleife raus. Solch Programme lassen sich ohne weiteres ohne goto-Label programmieren.
Warum also wird goto so verpöhnt. Aus Perfomancegründen! Durch goto wird der normale Ablauf des Programms einfach unterbrochen. Ich halte mich aus diesen Diskussionen heraus. Ich verwende selbst goto überhaupt nicht. Nur kann man sagen das ein goto mit Sprung nach vorne nichts ausmacht. Von einem goto das Rückwärtsspringt wird abgeraten......
/*Download:goto2.c*/
#include <stdio.h>
int main() {
int x; LABEL1: printf("Bitte geben sie eine Zahl ein : "); scanf("%d",&x);
if(x<=100) goto LABEL1; else printf("Ende!!!\n");
return 0; }
|
Dies stellt ein scheußliches Beispiel da was man ohne Probleme mit Schleifen darstellen kann...
/*Download:goto3.c*/
#include <stdio.h>
int main() {
int x;
do{
printf("Bitte geben sie eine Zahl ein : "); scanf("%d",&x); }while(x<=100);
printf("Ende!!!\n"); return 0; }
|
Sprünge über Funktionen sind übrigens mit den Funktion setjmp und longjmp möglich. Wir kommen in einem späteren Kapitel dazu.
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|