Verwendet ihr "GoTo's"?



  • Marc++us schrieb:

    Manche Leute benutzen statt goto ein throw .

    Was in Ruby durchaus legitim wäre 😃 😉



  • Was wäre der richtig elegante Weg um aus verschachtelten (3 oder mehr) Schleifen rauszukommen?



  • - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt
    - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt und zudem alle 3 mit einmal abbrechen will/muss



  • Mr Evil schrieb:

    - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt
    - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt und zudem alle 3 mit einmal abbrechen will/muss

    👍



  • In C ist goto schon ab und an nützlich, um zum Aufräumcode zu springen. Aber das ist auch nicht so schlimm, da ein guter Stil ja auch kleine Funktionen mit sich bringt und man so den Überblick nicht verliert 😉 :). In den meisten anderen Sprachen (wie C++) ist goto aber eigentlich nicht nötig.


  • Mod

    basti33 schrieb:

    Was wäre der richtig elegante Weg um aus verschachtelten (3 oder mehr) Schleifen rauszukommen?

    throw 🤡



  • Ja, ich benutze es. Vermutlich nur so alle 2-3 Jahre, aber manchmal kommts vor. 😃



  • Mr Evil schrieb:

    - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt
    - erst gar nicht soweit kommen lassen das man in 3 schachteln steckt und zudem alle 3 mit einmal abbrechen will/muss

    Und wie mache ich das, wenn ich über mehrere (bzw. mehrdimensionale) Arrays iterieren muss?



  • Dann bricht man in den seltensten Fällen ab. Oder hast Du mal ein griffiges Beispiel, wo es nicht auch ein return täte?

    Ich habe goto in 10 Jahren bisher zwei mal verwendet. Einmal aus Faulheit (ist später rausgeflogen) und einmal, weil ich keine besser lesbare Lösung fand. Und ein künstliche eingeführtes Abbruch-Flag statt einem goto finde ich z.B. nicht wesentlich besser lesbar.



  • Mich würde mal interessieren, ob jemand die Erweiterung von gcc "Labels as Values" schon mal irgendwie irgendwo benutzt hat/benutzen musste? Also nicht nur mal zum Ausprobieren, sondern "echt" für irgendein Projekt o.ä.? 🙂
    Sieht ungefähr so aus:

    void Gaga()
    {
        void *ptr = NULL;
    
        if (irgendein Fehler)
        {
            ptr = &&Error;  /* Setze den Pointer auf die Sprungmarke Error */
        }
        else
        {
            ptr = &&Ende;   /* Setze den Pointer auf die Sprungmarke Ende */
        }
    
        goto *ptr;  /* gcc unterstützt pointer auf Sprungmarken :) */
    
    Error:
        /* Fehlerbehandlung */
        ...
    
    Ende:
        /* Funktionsende */
        return;
    }
    

Anmelden zum Antworten