Funktionsaufruf



  • Hallo und Guten Morgen liebe Gemeinde.

    Ich habe gerade folgendes programmiert:

    #include <iostream>
    using namespace std;
    
    void Funktion1 ()
    {
    	cout << "Hallo Maximilian!" << endl;
    }
    
    void Funktion2()
    {
    	cout << "Willkommen beim C++ - Programmieren!" << endl;
    }
    
    void Funktion3()
    {
    	cout << "Mache weiter so!" << endl;
    }
    
    int main()
    {
    	cout << endl;
    	cout << "Im Main!" << endl;
    	cout << "Jetzt werden die einzelnen Funktionen aufgerufen!" << endl;
    	cout << endl;
    	Funktion1();
    	cout << endl;
    	Funktion2();
    	cout << endl;
    	Funktion3();
    	cout << endl;
    	cout << "Zurueck im Main!" << endl;
    	cout << "Auf Wiedersehen!" << endl;
    	cout << endl;
    
    	return 0;
    }
    

    Ich weiß, dass es nicht der C++ Standart ist, andererseits will mein Lehrer so programmieren. Also muss ich mich an meinen Lehrer halten, was der sagt.

    Dennoch hätte ich eine Frage:

    Wann ruft man eine Funktion auf, die nur Text zurückgibt?? Vor main() oder nach main()??

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • Hallo Max.

    Deine Funktionen geben keinen Text zurück, da der Rückgabetyp ja void ist. Somit geben sie nur Text aus.
    Da die Funktion main der Einstiegspunkt jedes C++-Programms ist, wird nur das ausgeführt, was in der main steht.

    gruß
    syntax



  • silent_max schrieb:

    Ich weiß, dass es nicht der C++ stan**** ist, andererseits will mein Lehrer so programmieren. Also muss ich mich an meinen Lehrer halten, was der sagt.

    Beim ueberfliegen deines Codes seh ich nix, was nicht Standard-C++ ist.

    silent_max schrieb:

    Wann ruft man eine Funktion auf, die nur Text zurückgibt?? Vor main() oder nach main()??

    Deine Funktionen geben doch gar nix zurueck 😕
    Du meinst wohl, das sie Text ausgeben. Aber was soll "vor oder nach main() aufrufen" heissen? Du kannst innerhalb von Funktionen immer eine andere Funktion aufrufen. Und vom Standard her ist festgelegt, das main die erste Funktion ist, die aufgerufen wird (EDIT: mit Ausnahme der Konstruktoren von globalen Variablen*). Was nicht heisst, dass du die Funktionen innerhalb von main aufrufen musst.

    #include <iostream>
    
    void foo()
    {
        std::cout << "foo()";
    }
    
    void bar()
    {
        //Funktionsaufruf innerhalb von bar --ok
        foo();
    }
    
    //meinst du mit "Funktionsaufruf vor der main", das hier foo(); oder bar();
    //stehen koennte? Das geht nicht.
    
    int main()
    {
        foo(); //Funktionsaufruf in der main --ok
        bar(); //hier auch
        return 0;
    }
    

    *Die aber bekanntlich boese sind, weshalb ich das vor dem EDIT bewusst nicht sagte 🤡



  • Jonas OSDever schrieb:

    Und vom Standard her ist festgelegt, das main die erste Funktion ist, die aufgerufen wird.

    Dude, a ctor is a (special member) function.

    #include <iostream>
    
    struct A
    {
            A()
            {
                    std::cout << "Jonas hat leider";
            }
    } B;
    
    int main()
    {
            std::cout << " nicht Recht!";
    }
    


  • Sone, auf deine supercoole Erläuterung hättest du verzichten können, da sie eh nichtssagend ist.

    void coole_funktion()
    {
      std::cout << "qed\n";
    }
    int x = (coole_funktion(),0);
    
    int main()
    {
      std::cout << "oder so\n";
    }
    


  • @Jonas:

    Ich wollte eigentlich fragen, ob der Code wie folgt auch ok ist???

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	cout << endl;
    	cout << "Im Main!" << endl;
    	cout << "Jetzt werden die einzelnen Funktionen aufgerufen!" << endl;
    	cout << endl;
    	Funktion1();
    	cout << endl;
    	Funktion2();
    	cout << endl;
    	Funktion3();
    	cout << endl;
    	cout << "Zurueck im Main!" << endl;
    	cout << "Auf Wiedersehen!" << endl;
    	cout << endl;
    
    	return 0;
    }
    
    void Funktion1 ()
    {
    	cout << "Hallo Maximilian!" << endl;
    }
    
    void Funktion2()
    {
    	cout << "Willkommen beim C++ - Programmieren!" << endl;
    }
    
    void Funktion3()
    {
    	cout << "Mache weiter so!" << endl;
    }
    

    Weil bei meinem Compiler heißt es z. B. "Funktion1: Bezeichner nicht gefunden."

    Gruß

    Max



  • Nein, das geht nicht. Nur bekanntes kann verwendet werden:

    #include <iostream>
    using namespace std;
    
    void Funktion1 ()
    {
    	cout << "Hallo Maximilian!" << endl;
    }
    
    void Funktion2()
    {
    	cout << "Willkommen beim C++ - Programmieren!" << endl;
    }
    
    void Funktion3()
    {
    	cout << "Mache weiter so!" << endl;
    }
    
    int main()
    {
    	cout << endl;
    	cout << "Im Main!" << endl;
    	cout << "Jetzt werden die einzelnen Funktionen aufgerufen!" << endl;
    	cout << endl;
    	Funktion1();
    	cout << endl;
    	Funktion2();
    	cout << endl;
    	Funktion3();
    	cout << endl;
    	cout << "Zurueck im Main!" << endl;
    	cout << "Auf Wiedersehen!" << endl;
    	cout << endl;
    
    	return 0;
    }
    

    Stell dir das einfach so vor. Die erste Zeile der Datei ist deine Geburt, die letzte Zeile dein Tot. Du kannst nicht in die Zukunft sehen.


  • Mod

    Das kommt davon, dass du Funktion1 benutzt, bevor Funktion1 deklariert wird. Der Compiler liest von oben nach unten. Wenn er Zeile 10 liest, weiß er nicht, was Funktion1 sein soll.

    Mach die Funktionen vor die main. Oder alternativ benutz eine Forward-Deklaration:

    void Funktion1 ();
    
    [...]
    
    int main()
    {
     Funktion1();
    }
    
    [...]
    
    void Funktion1 ()
    {
        cout << "Hallo Maximilian!" << endl;
    }
    

    In Zeile 1 steht dann, was Funktion1 ist, so dass der Compiler in Zeile 7 weiß, dass sie richtig benutzt wird. Wie Funktion1 genau aussieht, kann dann auch irgendwo anders stehen. So funktioniert dann später auch die Aufteilung von Code in Übersetzungseinheiten und Headern. In den Headern steht nur die Deklaration der Funktionen, der genaue Code wird dann ganz woanders definiert.



  • Danke @SeppJ.

    Soweit habe ich die Sache mit Funktionsaufruf verstanden.

    Gruß Max



  • Merk dir am besten gleich die Begriffe.
    Das in Zeile 1 ist eine Deklaration (kein Code, nur Bekanntmachung der Funktion)

    Zeile 12 bis 15 ist eine Definition (da steht dann Code)


Anmelden zum Antworten