Hallo,

wenn man kein label angibt (selbst dieser Unfug geht in Java), dann ist es ein Sprung ans Ende eines Blocks, respektive an den Anfang eines Blockes.

Das Problem am Goto (und bei break, continue mit label) ist, dass man an der Stelle, wo der goto steht nicht weiß, ob man nach unten (Typ if), oder nach oben (Typ Schleife), oder ob man gar über Kreuz (Typ irregulär) springt. Zum letzten Typ gehört auch das einspringen in eine Schleife, oder if (kann auch try heißen!!!).

Das mit dem COBOL überzeugt mich nicht, man kann doch nicht als Argument für Unfug anbringen, dass es noch größeren Unfug gibt; das einzige Argument, das ich gelten lassen würde wäre, dass es einen Anwendungsfall mit GOTO gibt, der ohne goto nicht geht, oder schlechter lesbar wäre und das kenne ich bisher nicht.

Zu dem switch construct gibt es immer noch das gute alte if, else if, else if ...mit dem man mehrwertige Verzweigungen abbilden kann.

mfg

Dieter Bender

Zitat Zitat von Fuerchau
Was ist denn eine Kombination aus switch , continue oder break anderes als ein impliziter Goto ?

Bei der Source-Analyse ist der Weg des Programmes bei GOTO meist besser zu verfolgen, als Switch-Verteiler mit Dezimal-Konstanten die von irgendwo quasi angesprungen werden können.

In COBOL kann man sogar per ALTER-Befehl das Sprungziel eines GOTO ändern. Da fragt man sich dann tatsächlich, wo das Programm denn hinverzweigt, da zur Laufzeit über das Ziel entschieden wird.
Zur Compile-Zeit darf sogar kein Ziel angegeben werden:
"Label. goto." und später "alter Label to proceed to NewLabel."