@maddin

Der Text ausm Wiki ist von mir, und es ist ein Smiley dran. So einer

Wie überall ist da ein Funke Wahrheit drin.

Zunähchst mal
  1. Man kann jedes Programm ohne goto schreiben
  2. Das allein ist noch kein Grund, auf goto zu verzichten... Man kann auch jedes Programm ohne Funktionsaufrufe schreiben und/oder ohne lokale Variablen (auch rekursive)
  3. Ein C-Programm ist strukturiert. Eine Funktion hat Blöcke und ein Block wieder Teilblöcke. Idealerweise führt diese Strukturierung zu einem gut leserlichen Programm. goto durchbricht diese Systematik, denn mit goto kann man von einem Blick in einen anderen springen und zb mitten in den Gültigkeitsbereich einer Variablen, also zB ohne an einer Deklaration vorbei zu kommen. Compiler komman damit klar, aber schön ist das nicht.


IMHO kann goto in einigen wenigen Fällen die Lesbarkeit erhöhen. In Programmiersprachen wie C++/Java etc gibt es einen Exception-Mechanismus. Gibt es eine ungültige Operation, wirft man eine Ausnahme und braucht sich weiter keine Gedanken mehr darum zu machen.

Würde man ständig die Fehlerbedingung mit rumschleppen und abfragen müssen, würde das logischerweise das Programm aufblähen und schwerer verständlich machen, weil man sich nicht nur auf das Wesentliche konzentriert, sondern ständig die Fehlerbedingungen am Bein hat. Ähnlich kann man goto vorteilhaft nutzen. Ein Analogon zur Exception wäre aber eher ein "return" mitten in einer Funktion.

Auch ein return mitten in einer Funktion macht den Programmablauf klarer. Man ist eben fertig, was soll man noch x Zeilen in der Funktion rumlungern.... Sich den Rückgabewert zu merken und mitzuschleppen bis zum Ende des Funktionsblocks, ist zwar schön strukturiert, aber besser verständlich wird es nicht...

Wirklich übel ist ein nonlocal-Goto (in C longjump), also ein goto, das von einer Funktion in eine andere springt. Das ist alle sandere als trivial, denn der Stack etc. muss ja abgebaut werden.

Ich persönlich habe zweimal goto einmal angewandt (eigentlich mehrfach, da ein Makro u.a. zu "goto" ausexpandierte. Beide Male war die Codegröße der Grund dafür, goto zu verwenden. Selbst mit inline-Funktionen wäre der Code deutlich größer geworden...

Via goto kann man übrigens auch indirekt springen, also doe Label zB in ein Array legen, skizzenhaft aufgezeigt in "Verwendung von Labels" ganz am Ende des Abschnitts
https://www.roboternetz.de/wissen/in...ate_Machine.29

Zitat Zitat von Johann H.
Mit goto ist es möglich programme so dermaßen unübersichtlich zu machen , dass man nach kurzer zeit nichit mehr durchblickt[...]
Ja, mit goto lässt sich leicht ein unübersichtliches Programm bauen. Das freilich, ist auch mit endlos verschachtelten if-else-Konstrukten möglich, gobalen Variablen, miesen Bezeichnern, Zeiger-Gecaste, ... Grundsätzlich kann man in C jedes Konstrukt dafür hernehmen, einen undurchschaubaren Programmfluß zu bekommen...

Übrigens: Auch Java kennt das Schlüsselwort "goto", aber nur, um zu sagen, daß es nicht unterstützt wird, wenn man es anwenden will...


@Felix G
Was du wohl meinst ist Parameterübergabe mit globalen Variablen? So wie es bei dir dasteht gibt es jedenfalls nen Compiler-Fehler...