Funktionen aufrufen
Damit eine Funktion läuft, musst du sie aufrufen: Schreibe ihren Namen, dann runde Klammern und ein Semikolon, denn ein Funktionsaufruf ist eine Anweisung. Du rufst die Funktion im Rumpf von main auf:
#include <iostream>
void sageHallo() {
std::cout << "Hallo!" << std::endl;
std::cout << "Schönen Tag noch!" << std::endl;
}
int main() {
sageHallo();
}Dieses Programm gibt aus:
Hallo!
Schönen Tag noch!Erreicht das Programm bei der Ausführung von main einen Funktionsaufruf, springt es in die Funktion, führt ihren Rumpf von oben nach unten aus und macht dann mit der Anweisung nach dem Aufruf weiter. Du kannst eine Funktion beliebig oft aufrufen:
#include <iostream>
void sageHallo() {
std::cout << "Hallo!" << std::endl;
}
int main() {
std::cout << "Anfang" << std::endl;
sageHallo();
sageHallo();
std::cout << "Ende" << std::endl;
}Dieses Programm gibt aus:
Anfang
Hallo!
Hallo!
EndeDas Programm beginnt in main: Es gibt Anfang aus, führt den Rumpf von sageHallo zweimal aus und gibt schließlich Ende aus. Eine Funktion, die niemand aufruft, läuft nie.
Der Compiler liest das Programm von oben nach unten, und die Funktion, die du aufrufst, muss ihm schon bekannt sein. Deshalb definieren wir Funktionen über main. Dieses Programm hat die Funktion unter main:
#include <iostream>
int main() {
sageHallo();
}
void sageHallo() {
std::cout << "Hallo!" << std::endl;
}Das Programm lässt sich nicht kompilieren, und du siehst diesen Fehler in der Ausgabe:
main.cpp:4:5: error: use of undeclared identifier 'sageHallo'
4 | sageHallo();
| ^~~~~~~~~
1 error generated.Die Fehlermeldung sagt, dass Zeile 4 den Namen sageHallo verwendet, der noch nicht deklariert (bekannt gemacht) wurde. Als der Compiler bei Zeile 4 ankam, wusste er nichts von der Funktion unter main. Verschiebst du die ganze Funktion über main, ist der Fehler behoben.
In Programmen im Internet siehst du manchmal über main nur die erste Zeile einer Funktion, mit einem Semikolon am Ende, zum Beispiel void sageHallo();, und die ganze Funktion unter main. Eine solche Zeile heißt Deklaration: Sie teilt dem Compiler mit, dass es die Funktion gibt. Das funktioniert auch, aber in diesem Kurs schreiben wir ganze Funktionen über main.
Hüte dich vor zwei weiteren häufigen Fehlern:
- Fehlende Klammern.
sageHallo;ohne Klammern ruft die Funktion nicht auf. Das Programm lässt sich kompilieren, aber die Funktion läuft nicht, und es wird nichts ausgegeben. - Ein anderer Name. Der Name im Aufruf muss genau derselbe sein wie in der Definition, einschließlich Groß- und Kleinschreibung.
SageHallo();endet mit dem Fehlererror: use of undeclared identifier 'SageHallo'; did you mean 'sageHallo'?
So schreibst du es:
Anweisungen
- 1
Rufe im Rumpf von
maindie FunktionersteFunktiondreimal auf. - 2
Füge dem Rumpf von
ersteFunktioneine zweite Anweisung hinzu, dieFunktionen sind toll!ausgibt. Führe das Programm aus: Jeder der drei Aufrufe gibt jetzt beide Zeilen aus. Du hast den Code an einer Stelle geändert, und alle drei Aufrufe tun etwas Neues. Dafür sind Funktionen genau richtig.