Funktionen aufrufen
Damit eine Funktion läuft, rufst du sie auf: Du schreibst ihren Namen, dann Klammern und ein Semikolon. Ein Funktionsaufruf ist eine Anweisung. Funktionen rufst du im Rumpf von main auf:
#include <stdio.h>
void begruesse(void) {
printf("Hallo!\n");
printf("Einen schönen Tag noch!\n");
}
int main(void) {
begruesse();
return 0;
}Dieses Programm gibt aus:
Hallo!
Einen schönen Tag noch!Wenn das Programm beim Ausführen von main an einen Funktionsaufruf kommt, springt es in die Funktion und führt ihren Rumpf von oben nach unten aus. Dann kehrt es zurück und macht mit der Anweisung nach dem Aufruf weiter. Du kannst eine Funktion so oft aufrufen, wie du willst:
#include <stdio.h>
void begruesse(void) {
printf("Hallo!\n");
}
int main(void) {
printf("Start\n");
begruesse();
begruesse();
printf("Ende\n");
return 0;
}Dieses Programm gibt aus:
Start
Hallo!
Hallo!
EndeDas Programm beginnt in main: Es gibt Start aus, führt den Rumpf von begruesse zweimal aus und gibt zum Schluss Ende aus. Eine Funktion, die niemand aufruft, läuft nie.
Eine Funktion aufzurufen ist für dich nichts Neues. Auch printf ist eine Funktion, und jedes printf("Hallo!\n");, das du geschrieben hast, ist ein Aufruf: der Name der Funktion, Klammern und ein Semikolon. Genauso sind es strlen(name) und toupper(buchstabe) aus der Lektion über Zeichenketten. Diese Funktionen hat jemand anderes für dich geschrieben. Später in dieser Lektion siehst du, woher der Compiler sie kennt.
Achte auf zwei häufige Fehler:
- Fehlende Klammern.
begruesse;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, auch in Groß- und Kleinschreibung. Wenn du den Aufruf im ersten Programm in
Begruesse();änderst, lässt sich das Programm nicht kompilieren, und die Fehlermeldung beginnt so:
main.c:9:5: error: call to undeclared function 'Begruesse'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
9 | Begruesse();
| ^
main.c:9:5: note: did you mean 'begruesse'?„Call to undeclared function“ heißt, dass das Programm eine Funktion aufruft, die der Compiler nicht kennt. Den Rest der ersten Zeile verstehst du in der nächsten Übung. Die Zeile mit note ist ein hilfreicher Hinweis: Meintest du begruesse?
So schreibst du es:
Anweisungen
- 1
Rufe in
mainanstelle der beiden Kommentare die Funktionzeige_bannerauf. Das Programm gibt dann dasselbe aus wie das lange Programm in der vorigen Übung, abermainist viel kürzer. - 2
Das Spiel bekommt ein drittes Level. Gib am Ende von
main, vorreturn 0;,Level 3 geschafftaus und rufezeige_bannernoch einmal auf. - 3
Füge dem Rumpf von
zeige_bannerzwischenGut gemacht!und der letzten Zeile eine weitere Anweisung hinzu, dieDu hast einen Stern verdient.ausgibt. Führe das Programm aus: Die Nachricht hat sich nach allen drei Leveln geändert. Du hast den Code an einer Stelle geändert, und alle drei Aufrufe tun etwas Neues. Dafür sind Funktionen genau richtig.