C++ Goto - Von Sprungmarke "zurückkehren"?
-
Ja klar, aber wenn jemand unbedingt goto benutzen will und sich nicht durch gutes Zureden davon abbringen lässt.....
Ich meinte übrigens aus Langeweile goto benutzen, nicht vermeiden.
-
Dann würde ich ihm trotzdem nicht empfehlen, mit globalen Zustandsvariablen noch eine zweite Packung Spaghetti in den Code zu werfen.
Alle "berechtigten" Benutzungen von goto, die in diesem Thread gezeigt wurden, sind aus gutem Grund solche, bei denen nur ein einziges Label und nur ein einziger, kurzer Sprung vorkommen.
-
Wie würde man es denn sonst machen, wenn es unbedingt goto sein soll und man die Sprungmarken nicht dynamisch festlegen kann?
-
Benutze einfach COBOL. Da gibt es den wunderschönen Befehl ALTER, der Sprungziele dynamisch ändert.
Es ist zwar der absolute Horror so ein Programm zu lesen oder gar zu verstehen, aber es gibt es.
-
HansKlaus schrieb:
Wie würde man es denn sonst machen, wenn es unbedingt goto sein soll und man die Sprungmarken nicht dynamisch festlegen kann?
Arbeit verweigern. Oder auf INTERCAL als Sprache bestehen. Das kennt das schöne Schlüsselwort "COME FROM".
-
Arcoth schrieb:
hustbaer schrieb:
Nein, du brauchst nie
goto(in Sinne von:gotoist nie notwendig/unumgänglich).Das ist entweder eine Nullaussage, oder irreführend.
Du musst das schon im Zusammenhang betrachten.
Gast1 hat geschrieben dass ergotofür ein bestimmtes Projekt braucht.Gast1 schrieb:
Hi! Ich brauche Goto für ein bestimmtes Projekt.
Und im Weiteren dann gefragt ob man von
gotoirgendwie wieder zurückspringen kann. Spätestens da ist für mich klar, dass es wohl nicht um einen sinnvollen Einsatz vongotogeht, und dass einegoto-freie Lösung mit an Sicherheit grenzender Wahrscheinlichkeit besser ist. Daher meine Antwort dass ergotosicher nicht braucht.Arcoth schrieb:
Edit: Da ich aber keine Praxiserfahrung habe, lass ich mich gerne vom Gegenteil überzeugen.
Aus der Praxis kann ich nur sagen, dass ich seit geschätzten 10 Jahren kein
gotomehr geschrieben habe, und dass es nie ein echtes Problem war darauf zu verzichten. Und es mMn. auch nie zu vergleichsweise unschönem oder umständlichen Code geführt hat. Oft genug wird der Code dadurch sogar übersichtlicher/einfacher zu verstehen.ps: Ich war auch lange Zeit im "
gotofür multi-break ist OK" Lager. Bin ich grundsätzlich auch immer noch. Geändert hat sich diesbezüglich bloss, dass ich einfach schon so ewig überhaupt keingotomehr geschrieben habe, dass ich jetzt der Meinung bin dass sich auch "multi-breakgotos" quasi immer sehr einfach und ausreichend elegant vermeiden lassen.
-
SeppJ schrieb:
Arbeit verweigern. Oder auf INTERCAL als Sprache bestehen. Das kennt das schöne Schlüsselwort "COME FROM".
Hahaah, INTERCAL war sogar mir neu. Spielt in der Liga von Brainfuck mit.
-
Nein man braucht auch kein goto, eigentlich braucht man nicht mal mehr wirklich Programmiersprachen, weil man sich mittlerweile alles schön zusammen klicken kann.
Aber wo besteht denn jetzt das Problem, wenn das irgendjemand für sich trotzdem so machen will?
-
Freunde lassen Freunde kein goto benutzen.
-
Ganz schöne Bevormundung irgendwie....
-
HansKlaus schrieb:
Ganz schöne Bevormundung irgendwie....
Niemand wird gezwungen sich an die Aussagen im Forum zu halten, dennoch ist es unsinnig jemanden Bad-Practice beizubringen. In sofern gibt es eine gewisse Bevormundung: Man versucht keinen schlechten Code zu unterstützen. Das Forum soll helfen, nicht schaden (und eine schlechte Angewohnheit wird man selten wieder schnell los).
-
HansKlaus schrieb:
Aber wo besteht denn jetzt das Problem, wenn das irgendjemand für sich trotzdem so machen will?
Erste Regel des Goto-Clubs: benutze nie
goto. Zweite Regel des Goto-Clubs: benutze niegoto!
-
Hm. Wenn man sich mal zum Beispiel den Code von systemctl anguckt (https://github.com/systemd/systemd/blob/master/src/systemctl/systemctl.c), wird man dort viele gotos finden und ich finde den Code dadurch nicht unbedingt unübersichtlich. Gut, das ist C ohne ++ und mit ++ könnte man die Ressourcen anders verwalten.
Aber ich dachte, dieses komplette goto-Verbot wäre inzwischen überholt und man kann goto schon einsetzen, sollte dies aber nur sehr überlegt tun.
Die Frage ist aber eigentlich hier eine andere: Gast1 schrieb "Funktionen [...] nicht gestattet.". Spannend ist doch: warum sind Funktionen verboten? Ist das eine Übungsaufgabe zu goto?
-
Naja, der Code dort ist nicht unbedingt unübersichtlich, aber er wäre auch nicht weniger übersichtlich wenn e.g.
list_socketsnicht 75 Zeilen lang wäre. Spaltet man die Funktion entsprechend auf, erübrigen sich auch diegotos.
-
Spannend ist doch: warum sind Funktionen verboten? Ist das eine Übungsaufgabe zu goto?
Man kann es nur hoffen.
Aber der Pessimist in mir befürchtet mal wieder eine Optimierungsfrage aufgrund von Halbwissen. Funktionsaufrufe sind ja eine teuere Angelegenheit und wenn dann jemand inline Funktion und Makros nicht kennt, könnte man ja auf die Idee kommen und Funktionen in zeitkritischen Bereichen verbieten.
-
hustbaer schrieb:
Nein, du brauchst nie
goto(in Sinne von:gotoist nie notwendig/unumgänglich).Was ist schon unumgänglich? Kannst ja alles in Binärcode programmieren, dann brauchst du nicht mal eine Programmiersprache. goto kann in ausgewählten Situationen die beste Lösung sein. Beispiel entfällt, kein' Bock rumzustreiten.
-
versionsnummer schrieb:
hustbaer schrieb:
Nein, du brauchst nie
goto(in Sinne von:gotoist nie notwendig/unumgänglich).Was ist schon unumgänglich? Kannst ja alles in Binärcode programmieren, dann brauchst du nicht mal eine Programmiersprache. goto kann in ausgewählten Situationen die beste Lösung sein. Beispiel entfällt, kein' Bock rumzustreiten.
Das sind aber meistens recht konstruierte Situationen, in denen goto ein bisschen besser ist als die strukturierte Vorgehensweise. Im Gegensatz zu Regelfall, in dem goto sehr viel schlechter ist.
-
goto gehört zum C++ Sprachkonstrukt also ist es legitim es zu benutzen. Ich verstehe nicht weshalb man alles schlecht reden muss und zur Lösung trägt es auch nicht bei.
-
manni66 schrieb:
goto gehört zum C++ Sprachkonstrukt also ist es legitim es zu benutzen. Ich verstehe nicht weshalb man alles schlecht reden muss und zur Lösung trägt es auch nicht bei.
Welche Schnapsnase kann sich denn da keinen Namen ausdenken?
-
HansKlaus schrieb:
da kann man mal sehen, was bei dem ständigen "kein goto benutzeneinself" rauskommt: die leute können nicht mal mehr goto benutzen.

eine möglichkeit wäre jedenfalls
goto unterprogramm; rueckkehr_von_unterprogramm: //mach was unterprogramm: //mach was goto rueckkehr_von_unterprogramm;Sorry, ich habe nicht den ganzen Thread gelsesen, aber muss im Moment verspätet unbedingt was zu schreiben

Die obige Konstruktion ist das gute alteGOSUBaus dem guten alten Commodore Basic 2.0. Nur das damals noch mit Zeilennummern gearbeitet wurde.Aber schon damals hat man versucht,
GOTOirgendwie zu umgehen.