Switch, Funktionsaufruf und Cout



  • @DirkB sagte in Switch, Funktionsaufruf und Cout:

    @GMgenia

    Bei einem Funktionsaufruf wird sich der Punkt gemerkt, wo zu der Funktion verzweigt wird.
    Eine Funktion läuft bis zum return oder Ende.
    Dann wird zu dem Aufrufspunkt zurückgekehrt.

    Egal wie oft die Funktion aufgerufen wird.

    Ein Funktiosaufruf ist kein goto

    Diese Antwort bringt mich etwas näher zum Verständnis, aber nicht so sehr.

    Wenn ich das richtig verstanden haben, sind die Aufrufspunkte Zeile 23 und Ziele 32. Aber wie ich verstehe, sind Zeile 24 und Zeile 25 nicht Teil der Aufrufspunkte.... Müsste also nicht über diese Zeilen hinweg aufgerufen werden?



  • @GMgenia
    Was meinst du wo es weiter geht, wenn die Ausführung an dieser Stelle

    void otherFunktion()
    {
      std::cout << "otherFunktion()\n";
      funktion();
    } // <---------------------------
    

    angekommen ist?



  • @GMgenia sagte in Switch, Funktionsaufruf und Cout:

    aber, es geht mir nicht um einen anderen Code. Ich will nur verstehen was in dem Beispiel passiert.

    Deswegen habe ich dir ja aufgeschrieben was passiert.



  • @GMgenia

    Du kannst das Programm mal mit Zettel und Stift durchspielen.
    Nimm dir so einen 8x8 Notizblock.

    Funktionen sind wie Arbeitsanweisungen.
    Du befolgst nacheinander die Anweisungen.
    Bei einem Funktionsaufruf schreibst du die aktuelle Zeilennummer auf einen Zettel legst ihn neben dich und machst mit der aufgerufenen Funktion weiter.
    Bei einem return oder der letzten } der Funktion nimmst du den obersten Zettel von dem Stapel und machst an der notierten Zeile im Programm weiter. Den Zettel schmeißt du weg.

    PS: bei einem neuen Aufruf einer Funktion gibt es auch neue lokale Variablen.



  • @DirkB sagte in Switch, Funktionsaufruf und Cout:

    die aktuelle Zeilennummer

    Ne, eben nicht. Dann kappiert er verschachtelte Funktionsaufrufe wieder nicht.



  • @hustbaer sagte in Switch, Funktionsaufruf und Cout:

    @GMgenia
    Was meinst du wo es weiter geht, wenn die Ausführung an dieser Stelle

    void otherFunktion()
    {
      std::cout << "otherFunktion()\n";
      funktion();
    } // <---------------------------
    

    angekommen ist?

    Genau darum geht es in meiner Frage. Warum kommt das Funktionsende erst zum Abschluss des Programmablaufs? Wenn eine Ausgabe nach dem Funktionsaufruf steht, kommt auch dieser erst zum Ende des Programmablaufs.



  • Da, ich habs dir aufgemalt:

    +--- main() ----+     +--- function() ------------------+
    | function(); --|---->|  std::cout << ">";              |
    | return 0; <---|--+  |  switch(_getch()) { *)          |
    +---------------+  |  |  case '1':                      |     +--- otherFunction() -----------------+
                       |  |      otherFunction(); ----------|---->|  std::cout << "otherFunction()\n";  |      +--- function() ------------------+
                       |  |      std::cout << "\nBack "; <--|--+  |  function(); -----------------------|----->|  std::cout << ">";              |
                       |  |      break;                     |  +--|--[return;] <------------------------|--+   |  switch(_getch()) { *)          |
                       |  |  }                              |     |                                     |  |   |  case '1':                      |     +--- otherFunction() -----------------+    
                       +--|--[return;]                      |     +-------------------------------------+  |   |      otherFunction(); ----------|---->|  std::cout << "otherFunction()\n";  |     +--- function() ----------------------+
                          |                                 |                                              |   |      std::cout << "\nBlack "; <-|--+  |  function(); -----------------------|---->|  std::cout << ">";                  |
                          +---------------------------------+                                              |   |      break;                     |  +--|--[return;] <------------------------|--+  |  switch(_getch()) { *)              |
                                                                                                           |   |  }                              |     |                                     |  |  |      case '1':                      |      +--- otherFunction() -----------------+
                                                                                                           +---|--[return;]                      |     +-------------------------------------+  |  |          otherFunction(); ----------|----->|  std::cout << "otherFunction()\n";  |     +--- function() -------------------+
                                                                                                               |                                 |                                              |  |          std::cout << "\nBack "; <--|--+   |  function(); -----------------------|---->|  std::cout << ">";               |
                                                                                                               +---------------------------------+                                              |  |          break;                     |  +---|--[return;] <---------------------------+  |  switch(_getch()) { ----[ input != 1 ]---+
                                                                                                                                                                                                |  |  }                                  |      |                                     |  |  |  case '1':                       |       |
                                                                                                                                                                                                +--|--[return;]                          |      +-------------------------------------+  |  |      otherFunction();            |       |
                                                                                                                                                                                                   |                                     |                                               |  |      std::cout << "\nBack ";     |       |
                                                                                                                                                                                                   +-------------------------------------+                                               |  |      break;                      |       |
                                                                                                                                                                                                                                                                                         |  |  }                               |       |
                                                                                                                                                                                                                                                                                         +--|--[return;] <---------------------|-------+
                                                                                                                                                                                                                                                                                            |                                  |
                                                                                                                                                                                                                                                                                            +----------------------------------+
    
    

    * ) Eingabe ist '1'.



  • Dieser Beitrag wurde gelöscht!


  • So, jetzt sollt's stimmen.



  • @Swordfish sagte in Switch, Funktionsaufruf und Cout:

    So, jetzt sollt's stimmen.

    Oh, das Bild ist supper! Jetzt habe ich verstanden!!
    Erst ab der Eingebe !=1 kehrt der Programmablauf zurück und die Ausgabe der cout wird auf dem Bildschirm ausgegeben! Darauf wäre ich nicht gekommen.... Vielen Dank für diese super Erklärung!!



  • @Swordfish OT: hast du nen tool fuer deine ascii art?



  • @Cardiac Ja, Notepad++ ^^



  • @Cardiac ASCII Art Studio schaut nett aus.
    Da gibts was brauchbar aussehendes online: https://asciiflow.com



  • @Swordfish Niedlich, ich hab versucht was derartiges zu finden, aber google war der meinung deutsch verwenden zu muessen, also waren die ergebnisse entsprechend misearbel...

    merci fuer den link :>


Anmelden zum Antworten