GOTO ist nicht langsam



  • @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.



  • @FireFlow:

    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;
    }
    

  • Mod

    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.



  • hi
    leute ich weiß nicht wasihr habt GOTO4EVER



  • peterchen schrieb:

    @Mahlzeit, cico2005:
    hä?

    Man sollte davon ausgehen, das a,c,d,e komplexere Bedingungen sind, die sich inner halb der jeweiligen Blöcke ändern.

    Dann schreib es genauer hin und ich ändere es dir entsprechend. Im Moment ersetzt mein Code deinen exakt. Ich kann ja nicht ahnen, was du dir noch dazudenkst. Was du dir auch immer ausdenkst, es wird immer ohne goto gehen.



  • Schluss jetzt! Wie kleine Kinder, die immer Recht haben wollen...
    Vor wem müsst ihr euch rechtfertigen?



  • Die heutige Entwicklung von Programmer basiert meist auf ein großes Team das ziemlich gut zusammen arbeiten müssen kann. Dazu gehört auch dass man Quellcode gut auskommentiert und strukuriert aufbaut. GoTos verschlechtern die Lesbarkeit des Codes, und bei komplexen verschachtelten Schleifen wird man nach einer gewissen Zeit mit den Schleifen mehr Überblick behalten, das steht für mich ganz klar fest.



  • c.rackwitz schrieb:

    Schluss jetzt! Wie kleine Kinder, die immer Recht haben wollen...
    Vor wem müsst ihr euch rechtfertigen?

    Du bist doch eher das kleine Kind, welches nicht einsehen will, dass wir Recht haben, nur weil du selber etwas nicht kannst, was wir können.

    Da sagst du natürlich "Schluss jetzt", weil du uns ncihts mehr entgegenzusetzen hast und nicht einsehen kannst, dass du verloren hast.



  • Schluss jetzt!

    Nö!

    Vorwärts zum Größeren Ruhme GOTO's! ;p

    @Mahlzeit:
    Ist ja nicht mein Code - ich hab ihn als "Strukturangabe" verstanden.

    volatile a,b,c,d,e,f,g;
    ...
    while(a)
    {
      ...
       while(c)
       {
          ...
          while(d)
          {
              ...
              if (e)
                 goto fertig;
              ...
          }
          ...
       }
       ...
    }
    fertig:
    ...
    

    Der "..." - Operator wird hierbei im exekutiven Kontext als "Do what I mean" - Anweisung verwendet (mein Vorschlag für den C++201x - Standard).

    --------

    Ist ja nicht , daß ich ein goto-fetishist bin. Hab mal unsere Quellen gescant (2037 files, 23MB sources):
    4 gotos von mir, zu dreien davon steh ich 🙂
    4 gotos nicht von mir, die ich für total sinnlos halte 😃

    80 in einer externen libary... 🙄



  • Da der Ansi-Standard besagt, dass der Compiler volatile ignorieren darf, bin ich nun mal so ein Compiler und ales bleibt beim alten. Außerdem habe ich volatile aufm PC noch nie verwendet, höchstens mal auf nem uC. Sauber ist es aber auch dort nicht. Also arg konstruiert dein Beispiel.
    Das Beispiel ist ansonsten zu allgemein, um es umzuschreiben, kann ja auch nicht wissen "what you mean". Poste doch mal eines der Beispiele, zu denen du stehst.



  • Mahlzeit, für mich bist du der Troll des Jahres. Registrier dich wenigstens mal, du identitätsloser Vandale. (bezogen auf deinen vorletzten Post)

    Edit: Der Punkt ist doch nicht, dass es immer ohne GOTOs geht. Das stimmt ja wenigstens. Der Punkt ist, dass ich nicht prinzipiell leugnen will, dass GOTOs in manchen Situationen besser sind.



  • Mahlzeit schrieb:

    c.rackwitz schrieb:

    Schluss jetzt! Wie kleine Kinder, die immer Recht haben wollen...
    Vor wem müsst ihr euch rechtfertigen?

    Du bist doch eher das kleine Kind, welches nicht einsehen will, dass wir Recht haben, nur weil du selber etwas nicht kannst, was wir können.

    Da sagst du natürlich "Schluss jetzt", weil du uns ncihts mehr entgegenzusetzen hast und nicht einsehen kannst, dass du verloren hast.

    Is klar... Hier kann überhaupt neiamnd etwas verlieren. GoTo oder Schleife macht funktionell keinen Unterschied (wie schon 1000 mal erwähnt inzwischen). Es ist jediglich eine Frage des Stils und der Übersichtlichkeit und Lesbarkeit des Codes. Und jeder anständige Programmierer kann eine Schleifenkonstruktion schneller durchschauen als eine GoTo-Konstruktion.

    Deine Argumentation ist kindisch, und dass das hier ausartet und nichts mehr mit dem Thread zu tun hat (der sich an die Performance gerichtet hat) ist ja wohl klar.


Anmelden zum Antworten