Kann "goto" wieder "in" werden?



  • Original erstellt von <DocJunioR>:
    **Das GoTo bewegt den ProgramPointer genau an die Stelle, wo man ihn haben will.
    Es gibt dabei keinen eindeutigen Weg mehr zurück!

    Der Call in Funktionen merkt sich auf dme Stack die Adresse, von der aus die Funktion aufgerufen wurde. Nach der Abarbeitung der Funktion wird zurück gesprungen.

    Soviel zum Bekannten.
    Man kann sich nun denken, was passiert, wenn man ausversehen mal ein goto falsch setzt. Es kommt zu Endlosschleifen, völlig wirrsinnigen Daten und unnötigen Programmabstürzen.
    **

    Sorry, aber da muß ich jetzt wirklich langsam draufhauen:

    Das ist Müll was Du schreibst, sorry. Du sprichst hier vom BASIC-Goto. In C kannst Du mit goto nicht aus Funktionen raus oder in andere reinspringen, das goto ist letztlich auf den Block {} begrenzt. Punkt. Keine Gefahr von Lack- oder Stackschäden. Vergiss alle diese Argumente, sie sind falsch.

    Und falls es Dir gelingt C-Programme zu schreiben, bei denen der Block so groß ist daß man mit Goto zwischen 100 Zeilen springen kann, so hast Du ein anderes Problem als das Goto...

    Goto ist bestimmt kein häufiges Schlüsselwort in C oder C++ - aber diese Verdammung mit Hilfe von 20 Jahre alten Argumenten ist völlig übertrieben.



  • Nur dass goto verdammt selten benötigt wird.



  • Eine Frage zum goto:
    Angenommen, ich habe eine Funktion, in der mehrere Codeblöcke existieren (z.b. mehrere Schleifen). Wenn nun eine nicht zulässige Bedingung eintritt, möchte ich die Funktion beenden. Davor müssen aber noch bestimmte Aufgaben erledigt werden. Wenn ich nun diese Aufgaben am Ende der Funktion nach einem Label X schreibe, dann kann ich mit goto aus einer beliebigen Schleife nach X springen. Wie würde man das ohne goto machen? (sollte natürlich nicht mehr Code werden und genauso schnell sein)



  • NEIN



  • @ <->
    Indem Du das, was unbedingt ausgeführt werden musst in den Destruktor einer Klasse packst, von dieser Klasse ein lokales Objekt anlegst und Dich dann darauf verlässt, dass die C++ garantiert den Dtor ausführt



  • int main(int argc, char* argv[])
    {
      goto Marke;
    
      for (int i(0); i > 10000; ++i)
      {
        Marke:
        //...
      }
      return 0;
    }
    

    Bei obigem Code kommt ein Fehler, dass die Initialisierung einer lokalen Variable übersprungen wird. Das goto lässt also weder das Verlassen des Scopes zu, noch, dass man Variableninitialisierungen überspringt ... Vielleicht ist es doch besser als sein Ruf! Beginne es interessant zu finden 🙂



  • @kartoffelsack

    gut so !



  • kartoffelsack:
    Hab vergessen zu sagen, dass es in C sein soll aus. Aber ist deine Idee nicht viel langsamer als ein einfacher jump?


Anmelden zum Antworten