ein Kapitel zurück                                           ein Kapitel weiter

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 zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf