"goto"-Anweisung auch entgegengesetzt?
-
darf es in c variableninitialisierungen bypassen?
darf es in c in ne andere funktion hüpfen?
-
Genau wegen solcher Fragen (die hoffentlich mit nein beantwortet werden können) sollte man Goto nicht benutzen. Ich schreib seit Jahren Software und habs noch nie gebraucht.
@Bowser Wie du ja selbst schon mal gesagt hast, "programmierst" du indem du diverse Quellen zusammenschnippelst. Es wäre nun wohl der Zeitpunkt gekommen, wirklich mit Programmieren anzufangen.
-junix
-
Hi
also wenn man sich etwas in Assembler auskennt, weiß man dass Sprünge (bzw bedingte sprünge) das einzige Mittel sind um von sequetiellen Ablauf abzuweichen.
Im endeffekt laufen schleifen,ifs,fors,return-anweisungen etc.. alles auf Sprünge hinaus, wenns man kompiliert ist.
Aber gerade deshalb weil goto eben cHaos im Programm erzeugen kann, gibt es ja die Abstraktionen.
Die einzige Anwendung, wo ichs mal verwendet habe war ein einfaches Automaten Programm, wo man immer von zustandsfunktion zu zustandsfunktion sprang.Aber auch hier gibt es viel bessere Lösungen.
Grüß Flow
-
Original erstellt von volkard:
darf es in c variableninitialisierungen bypassen?
darf es in c in ne andere funktion hüpfen?Ja. Nein.
[Goto macht Quelltext übrigens nicht unübersichtlich. Der Programmierer produziert schwer lesbaren Code, weil er goto da verwendet hat, wo ein anderes Sprachmittel angebrachter gewesen wäre.]
-
Lustig finde ich es immer wenn Leute try-chatch als einen Ersatz für goto mißbrauchen
.
-
goto lässt sich nicht nur in 99,9% der Fälle, sondern IMMER vermeiden. wer das nicht glaubt, der schicke mir code mit goto, von dem er glaubt, dass es nicht ohne goto geht! wenn das ganze nicht gerade durch die vielen gotos zu kompliziert ist, kann ich ihm (oder ihr??,
gerne umschreiben
cu todo
-
Die Möglichkeit etwas zu vermeiden, ist natürlich ein hervorragender Grund etwas zu vermeiden. Funktionen kann ich vermeiden, darum vermeide ich ab jetzt Funktionen. Danke für den guten Tipp.
-
Sicher geht das, die Frage ist, ist das sinnvoll?
-
Original erstellt von Daniel E.:
[QB]Funktionen kann ich vermeiden, darum vermeide ich ab jetzt Funktionen.QB]Cool, eine 30000-Zeilen-main
-
nee. zusammengehörige anweisungsblöcke werden in ne entsprechende headerdatei verfrachtet und gemakrot oder gegotot.
hier ein teil der string.h
:strcpy
{char* d=p1,s=p2;while(*d++=*s++};}aufruf einfach mit
char buf[10];
p1=buf;p2="hallo";goto strcpy;weicheier verwenden sogar makros:
//das hier entspicht der alten version mit ner normalen funktion.
:strcpym
{char* d=p1,s=p2;while(*d++=*s++};}
#define strcpy(d,s){p1=d;p2=s;goto strcpy;}//und das einer inline-funktion
#define strcpy(d,s){p1=d;p2=s;while(*p1++=*p2++);}damit lassen sich auch alle objektorientierten sprachmitten abbilden, auf die wir ab jetzt auch verzichten sollten, weil es einfacher geht.
-
Ne GOTO's sind schon sinnvoll - aber man sollte die sehr überlegt einsetzten - alles kann man auch ohne GOTO's lösen - jedoch ich der einfachere Weg IMMER vorzuziehen.
Hier sind 3 verschachtelte Schleifen. Break verlässt nur eine Schleife. Man müsste evtl TMP-Variablen anlegen - das ist schlecht. Und wenn einer tatsächlich eine Funktion extra dafür anlegt, dann soll er mal überlegen was den nun übersichtlicher ist (Funktion muss man ja auch erst suchen usw...)
for ...
{while ...
do
if ..... then goto abbruch
while ...;};
};
abbruch:;
-
Naja, im Linux Kernel wird hier und dort mal ein goto verwendet (aus performance gründen...). Aber ich bin auch gegen solche Mittel.
Fazit: goto darf nur verwenden, wer ein Super Kernel-Hacker ist...
-
Original erstellt von <sucker>:
Fazit: goto darf nur verwenden, wer ein Super Kernel-Hacker ist...Zusatz 1 zu Fazit: Jeder darf goto verwenden, solange goto die beste Möglichkeit darstellt das Problem/ die Lösung auszudrücken und zu implementieren.
-
Original erstellt von <TS>:
**Hier sind 3 verschachtelte Schleifen. Break verlässt nur eine Schleife. Man müsste evtl TMP-Variablen anlegen - das ist schlecht. Und wenn einer tatsächlich eine Funktion extra dafür anlegt, dann soll er mal überlegen was den nun übersichtlicher ist (Funktion muss man ja auch erst suchen usw...)
**nonsens. die funktion steht genau drüber und ist inline.
und wer funktionen suchen muß, hat unordnung. gerade der sollte kein goto verwenden.
-
Naja mir ist egal - dann code für jedes Schleifengebilde eine Funktion
-
Wenn die Funktion keinem sinnvollen abstrakten Begriff zugeordnet werden kann, also rein zur Vermeidung des gotos eingeführt wird, halte ich das für ein und dieselbe Kategorie wie alle anderen Mechanismen zum selben Zweck.
-
Original erstellt von Bashar:
Wenn die Funktion keinem sinnvollen abstrakten Begriff zugeordnet werden kann, also rein zur Vermeidung des gotos eingeführt wird, halte ich das für ein und dieselbe Kategorie wie alle anderen Mechanismen zum selben Zweck.jo.
in c++ kommt mir's nicht vor, daß ein goto zum rausspringen aus schleifen nutwendig wäre. die schleifen sind entweder verschachtelt und laufen dann auch durch oder sind rausspringer, wie die suchschleife, aber die ist ne sinnvolle eigene funktion.
in c kanns natürlich rausspringer geben, die unten noch ein fclose brauchen, also ist da goto zu nehmen.
-
HI
Nochmal zu goto, das einzige wirkliche Argument für Goto, ist tatsächlich die Performace. Man kann jedes Konstukt auch ohne Goto lösen, aber Funktionen oder Programmteile die x mal oder retundant aufgerufen werden, können damit sicher hier und da ein goto rechtfertigen, was aber normalerweise erst in der Optimierungsphase eingesetzt werden sollte und nicht schon während der ersten Implementierung.
Gruß Flow
-
Original erstellt von Flow_cplus:
Nochmal zu goto, das einzige wirkliche Argument für Goto, ist tatsächlich die Performace.nein!
lies den Thread!!!Performance hat damit nix zu tun!
die meisten gotos werden einfach aus faulheit heraus gesetzt.
aber es gibt fälle wo goto sinnvoll sein kann - nämlich dann wenn goto das problem besser ausdrückt!sicher, man kann es mit immer umgehen - aber nicht immer ist der workaround besser als das goto.
zur performance:
ein goto zaubert auch nicht. ein break oder continue sind exakt gleichschnell wie ein goto - und sollte man inline funktionen verwenden (siehe volkard) dann ist das return auch genauso schnell!fazit: goto ist kein performance wunder!
-
Man kann jedes Konstukt auch ohne Goto lösen
wie lang geht es bis die leute begreiffen das das kein argument ist.... nur weil es möglich ist nach moskau zu laufen ist das noch lang kein grund nicht ein flugzeug zu nehmen... und so wir gerade dabei sind mit assembler kann man doch auch alles programmieren was man will also kann c++ immer "vermieden" werden
[ Dieser Beitrag wurde am 02.05.2003 um 14:07 Uhr von japro editiert. ]