GOTO ist nicht langsam
-
--linuxuser-- schrieb:
daraus sieht mann dass die for schleife eindeutig am langsamsten ist und die goto und while schleife gleich auf sind was sagt ihr dazu?
Was ich dazu sage? Deine Messung ist falsch! Da goto, for und while den Selben Maschienen Code ergeben, frag ich mich, woher die 15% Unterschied herkommen. Der Grund ist, dass du die Variable bei while und goto vor der Zeitmessung initialisierst. Bei der For Schleife tust du es erst wärend der Zeitmessung.
-
@FireFlow:
Verallgemeinerungen sind ne heikle Sache. Ich wäre an deiner Stelle vorsichtig, zumal du nicht im Geringsten vorahnen kannst, welche Situationen man nur mit einem goto lösen kann und welche besser mit Schleifen. Führ dir meinen Satz von wegen "Glaubenskrieg" besser nochmal zu Gemüte und dann denke "Mittelweg".Ich möchte mit einem treffenden Zitat abschließen:
"Man sollte viele Dinge von mehreren Standpunkten betrachten um sie ganz zu durchschauen."@ProgChild: Zeitmessungen... der sinnvollste Vergleich ist, die Möglichkeiten von einem Compiler in Assembly umsetzen zu lassen. Mach dich wegen solchen Vergleichsmethoden nicht irre.
-
FireFlow schrieb:
_JEDE_ GoTo-Konstruktion lässt sich durch eine Schleife ersetzten.
So ist es
Acuh wenn c.rackwitz das nicht kann, ein nicht-noob kann das.
-
FireFlow schrieb:
_JEDE_ GoTo-Konstruktion lässt sich durch eine Schleife ersetzten.
Dann zeig mal her:
label1: a(); if (bedingung2()) goto label2; b(); if (bedingung1()) goto label1; label2:
-
Ich bin mal so frei:
do { a(); if (bedingung2()) break; b(); } while (bedingung1());
Sonst noch was?
-
do { a(); if(bedingung2()) break; b(); } while(bedingung1());
-
sorry Dingo, ich war zu spät
-
hohesC schrieb:
sorry Dingo, ich war zu spät
immerhin sind wir uns einig
-
noch zum thema goto:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-70689-and-highlight-is-.html
-
@Mahlzeit: lol, warum denn gleich beleidigend werden? gehen dir die argumente aus? sprich mich im icq an, dann reden wir weiter. kannst dich auch mal hier im forum anmelden, damit du nicht mehr so anonym bist...
hohesC hat einen guten link gepostet. exceptions oder mehrfache breaks emuliert man am schnellsten mit gotos. mehr wollte ich nicht ausdrücken.
davon abgesehen... wieso seid ihr alle so verdammt militant?
wenn einer gotos nehmen will, lasst ihn.
wenn einer gotos hasst, lasst ihn.
-
Foo * foo = NULL; goto entry; do { Process(foo); entry: foo = GetNextFoo(); } while (foo);
_ohne_ ProcessFoo oder GetNextFoo 2x zu verwenden
-
Foo * foo = NULL; while(foo = GetNextFoo()) Process(foo);
naja, das bekomm ich schon noch besser ohne goto hin.
-
GetNextFoo() ist bei mir leider ein mehrzeiler
-
... ... while(a) { while(c) { while(d) { if (e) goto fertig; } } } fertig: ... ...
-
while(a) { while(c) { while(d) { if(e)break; } if(e)break; } if(e)break; }
auch wenns mehr code ist, lässt sich einfach ersetzen!
-
hohesC schrieb:
while(a) { while(c) { while(d) { if(e)break; } if(e)break; } if(e)break; }
auch wenns mehr code ist, lässt sich einfach ersetzen!
Das würde dann aber auch nur funktionieren, wenn e mindestens im while(a)-Block definiert (und/oder) deklariert wird.
-
GotoLover schrieb:
... ... while(a) { while(c) { while(d) { if (e) goto fertig; } } } fertig: ... ...
oder so:
... ... while(a && c && dd && !e) { } ...
-
So find ichs eleganter und übersichtlicher...
switch(foo) { case 'a':Befehl1();break; case 'c':Befehl2();break; case 'd':Befehl3();break; case 'e':Ende(); break; }
-
Mahlzeit schrieb:
oder so:
... ... while(a && c && dd && !e) { } ...
nur wenn a,c,dd und e nicht volatile sind - und das gilt dann im übrigen auch für die variante mit break - dort darf e ebenfalls nicht volatile sein.
-
@Mahlzeit, cico2005:
hä?Man sollte davon ausgehen, das a,c,d,e komplexere Bedingungen sind, die sich inner halb der jeweiligen Blöcke ändern.