Einsprungspunkte ausserhalb des Gültigkeitsbereichs



  • Hallo!
    Kann ich Einsprungspunkte von ausserhalb der Funktion aus, der sie angehören, aufrufen?
    Folgendes Codebeispiel:

    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    void funktion();
    
    int main()
    {
    start:
    cout << "Hallo Welt!" << endl;
    funktion()
    return 0;
    }
    
    funktion()
    {
    goto start;
    }
    

    Wie muss ich den Code verändern, damit aus funktion() heraus die Marke in main() "erreicht" werden kann?

    Danke, Golem



  • Sowas macht man überhaupt nicht. Nichtmal aus wissenschaftlichem Interesse. *würg* 😃



  • Golem86 schrieb:

    ...
    Wie muss ich den Code verändern, damit aus funktion() heraus die Marke in main() "erreicht" werden kann?

    Danke, Golem

    #include <iostream>
    
    using namespace std;
    
    void funktion();
    
    int main() {
       funktion()
       return 0;
    }
    
    void funktion() {
       cout << "Hallo Welt!" << endl;
       funktion();
    }
    

    Gruß,

    Simon2.



  • Program Counter in main() lesen, Wert speichern, den zuvor gelesenen Program Counter in funktion() setzen.



  • Davon mal abgesehen wuerde es auch ueberhaupt keinen Sinn machen mitten in eine Funktion zu springen. Und um so wie im Beispiel an den Anfang einer Funktion zu springen gibt es ja den guten alten Funktionsaufruf. 🤡



  • Also ich finde uninitialisierte variablen schon einen guten grund, um in die mitte einer funktion zu springen. Nicht immer so dogmatisch sein, mein jung...



  • das hieße, wenn du in die func springst, müsste der stack für diese funktion bereits aufgebaut sein. Das kling komisch, dann ist es nämlich kein einfacher sprung mehr, dann werden ja noch vorbereitungen getroffen.



  • Ich habe in der Zwischenzeit weiter nachgeforscht und habe nur die Möglichkeit gefunden, den Code ab dem Einsiegspunkt in eine neue Funktion auszulagern. Trotzdem danke für eure Antworten!

    mfg, Golem



  • ihgittipfui. also wenn du mit lustigem Rumspringen und Spaghetticode arbeiten willst, kann ich FORTRAN77 empfehlen, aber nicht C++. Auch wenn mir da schonmal jemand wiedersprochen hat, kann man eigentlich alles ohne solch unschoene Codehopser erreichen...



  • Wenn's dir nur um das wissenschaftliche Interesse geht, schau dir mal man: setjmp() an. Aber bitte mach so etwas NIEMALS in real-Code.


Anmelden zum Antworten