goto-Anweisung Funktionsübergreifend
-
Guten Tag,
ich hab ein Frage bezüglich einer Goto-Anweisung und zwar hab ich 2 Funktionen,
falls in der einen ein bestimmter Fall eintritt, soll diese Funktion beendet werden und per goto-Anweisung in die andere Funktion gewechselt werden. Gibt es solche goto-Anweisungen? Ich bekomm nämlich zur Zeit das Problem, wenn ich das so in die Funktionen schreibe, dass der Compiler dann die goto-Anweisung nicht findet, wenn sie in einer anderen Funktion steht. Kennt jemand ne gute Lösung dafür?Hier mal ein Beispielcode, der das Problem verdeutlicht.
void funktion_eins() { bool wechsel; // // mache hier irgendwas // if(wechsel) { goto funktion_zwei(); break;// bzw. beende funktion_zwei() } } void funktion_zwei() { // // mache dies und das // } }
-
gelöscht. mein nachredner hat ja so recht!
-
Hi,
was soll das goto?
if(wechsel) return funktion_zwei();
Jockel
-
@Jockelx
Wenn du goto verwendest erzähl es keinem und gib deinen Code auch niemanden.Wortwörtliches Zitat aus meiner Schulzeit (lang lang ists her):
"Vergesst diesen Befehl gleich wieder.. ich will nicht sehen, dass den irgendjemand benutzt."
und damit hatte der Lehrer ausnahmsweise mal recht. :p
-
Mathias schrieb:
@Jockelx
Wenn du goto verwendest erzähl es keinem und gib deinen Code auch niemanden.Wortwörtliches Zitat aus meiner Schulzeit (lang lang ists her):
"Vergesst diesen Befehl gleich wieder.. ich will nicht sehen, dass den irgendjemand benutzt."
und damit hatte der Lehrer ausnahmsweise mal recht. :p
Erstens weiss ich nicht, warum du mich ansprichst.
Zweitens: Das Argument hat mich überzeugt!
Wenn das dein Lehrer damals gesagt hat, dann stimmt das natürlich.
-
Ansonsten gehe mal in die Biblothek und suche Dir raus: Edsger W. Dijkstra, Go To Statement Considered Harmful, Communication of the ACM, Vol. 11 (2), 1068, pp. 147-148. Diesen text aus dem Jahre 1968 ist nichts hinzuzufuegen.
-
Jockelx schrieb:
Hi,
was soll das goto?
if(wechsel) return funktion_zwei();
Jockel
Wo genau rate ich dem Fragesteller eigentlich 'goto' zu nutzen?
Mmmmmhh?!?Irgendwie sehe ich das nicht, trotzdem ist für mich aber ein "Mein Lehrer
hat aber gesagt..." - Argument nicht so richtig gültig.
Nebenbei bemerkt finde ich es Unsinn goto's uneingeschränkt zu verteufeln.Jockel
-
Jockelx schrieb:
Nebenbei bemerkt finde ich es Unsinn goto's uneingeschränkt zu verteufeln.
Ich hatte mal den "Spass" ein Fortan-Programm aus dem Jahre 197X, dass ueber 20 Jahre lang immer wieder "verbessert" wurde zu analysieren. Nach zwei Wochen habe habe den Scheiss in die Ecke geschmissen - schon drei oder vier "geschickte" Sprungadressen koennen einen Code absolut unlesbar und unverifizierbar machen. Aber lese Dir den o. g. Artikel mal durch, dann wird Dir einiges klarer.
Im Uebrigen ist schon vor dem besagten Artikel nachgewiesen worden, dass das Goto nicht noetig ist - fuer garnichts.
-
Hallo,
Dazu muß man nicht in die Bibliothek gehen.
siehe hier http://www.acm.org/classics/oct95/
Bezüglich des goto muß ich dir uneingeschränkt zustimmen. Auch ich hatte schon die Freude alte Fortran-Programme umzuschreiben.Ciao
-
Goto macht Spagetticode, also machs lieber nicht.
Du kannst alles mit gut organisierten Schleifen lösen.
-
In diesen unzähligen "Was ist besser C++, Java oder C#.." - Standard-Threads
gibt es immer das gleiche Argument:Java/C# - Leute sagen: "Mit C/C++ kann soviel gefährlicher Mist passieren."
C++ - Leute: "Man kann aber machen was man will und wenn man aufpasst kann
man seinen Nutzen daraus ziehen."Hier sehe ich das ähnlich.
Hab aber auch keine Lust darüber zu diskutieren, da ich selber noch nie ein
goto gebraucht habe. Nur mir von irgendwelchen Leuten - die wahrscheinlich
10 Jahre weniger Programmiererfahrung haben als ich - sagen zu lassen:
"Zeig dein Code bloss keinem" war mir zu lächerlich. Insbesondere da die
zitierte Person sogar unfähig war, meinen Post zu lesen.Jockel
-
MBCS-CITP schrieb:
Ansonsten gehe mal in die Biblothek und suche Dir raus: Edsger W. Dijkstra, Go To Statement Considered Harmful, Communication of the ACM, Vol. 11 (2), 1068, pp. 147-148. Diesen text aus dem Jahre 1968 ist nichts hinzuzufuegen.
doch. dijkstra isz neulich gestorben. und wir dürfen darum endlich wieder goto verwenden.
-
MBCS-CITP schrieb:
Im Uebrigen ist schon vor dem besagten Artikel nachgewiesen worden, dass das Goto nicht noetig ist - fuer garnichts.
Wenn man nur das tun würde was nötig ist ...
-
Ich habe goto zwar noch nie verwendet, aber schon gesehen, dass manche Bibliotheken es zum exception-handling verwenden. Da man sonst doppelten Code schreiben müsste und/oder sehr unleserliche if/else Konstrukte.
Aber in C++ hat man ja, Gott sei dank, exceptions.
-
Sorry Jockelx,
war nicht unfähig deinen Eintrag zu lesen, sondern unfähig den richtigen Nick hinzuschreiben, hab mich beim Abtippen des Namens verguckt.
:o(War eigentlich an sash233 gerichtet.
Darüberhinaus wollte ich keine Romane darüber schreiben warum goto-Anweisungen nicht genutzt werden sollten. Wozu gibt es Google und gute Bücher?
Sollte nur ein Hinweis sein.
-
Wenn man in C++ programmiert, und Exceptions verwendet, braucht man in der Tat kaum noch "goto".
Es gibt aber auch (allen Lehrern und Dijkstra zum Trotz) sinnvolle Einsaetze fuer goto: z.B. in der Fehlerbehandlung, wie bereits angesprochen wurde.
Unter BCPL war GOTO grundsaetzlich global: Man konnte ueberall hin springen.
In C wurde das geaendert, und seitdem (auch in C++) ist goto lokal, d.h. man kann nur innerhalb einer Funktion springen.
Es gibt aber noch "setjmp.h" und die Funktionen setjmp() und longjmp(). Es gibt z.B. Faelle (in Interpretern z.B.), bei denen man mittels longjmp() wieder in die Interpreterschleife zurueckspringen will. Heutzutage koennte man das aber auch mit Exceptions loesen (hab ich schonmal gemacht, war ziemlich praktisch). setjmp() und longjmp() sind ein sehr krudes Vehikel, bei Exceptions kann man ja nach Belieben z.B. noch Parameter uebergeben.
-
Hmmm ich weiß nicht. Bei kurzen Funktionen habe ich durch goto nichts gewonnen und bei langen, tendiere ich sowieso eher dazu die Funktionen in sinnvolle Teile zu splitten. Dann kann man sich nicht nur die gotos sparen, sondern hat auch noch wiederverwendbaren Code.