Funktionen definieren
In dieser Lektion lernst du, eigene Funktionen zu schreiben. Beginnen wir mit einem Problem. Ein Spiel gibt jedes Mal dieselbe Nachricht aus, wenn du ein Level geschafft hast. Das Programm im Editor macht es für zwei Level:
#include <stdio.h>
int main(void) {
printf("Level 1 geschafft\n");
printf("==========\n");
printf("Gut gemacht!\n");
printf("==========\n");
printf("Level 2 geschafft\n");
printf("==========\n");
printf("Gut gemacht!\n");
printf("==========\n");
return 0;
}Es funktioniert, aber dieselben drei Zeilen stehen zweimal da. Ein richtiges Spiel hat hundert Level. Stell dir vor, du müsstest diese Zeilen hundertmal schreiben! Und wenn du die Nachricht ändern wolltest, müsstest du sie an hundert Stellen ändern und würdest bestimmt eine übersehen.
Programmierer versuchen, Code nicht zu wiederholen. Sie schreiben den wiederholten Teil einmal, geben ihm einen Namen und verwenden ihn dann überall, wo sie ihn brauchen. Ein solches benanntes Stück Code heißt Funktion. Ein guter Name sagt auch, was der Code macht, damit das Programm leichter zu lesen ist.
Tatsächlich schreibst du seit der ersten Lektion eine Funktion: main. Die Zeile int main(void) { beginnt die Definition einer Funktion namens main, und die Anweisungen zwischen den geschweiften Klammern sind ihr Rumpf. Wenn du ein Programm ausführst, beginnt es mit main. Deine eigene Funktion definierst du auf ähnliche Weise:
void begruesse(void) {
printf("Hallo!\n");
printf("Einen schönen Tag noch!\n");
}Eine Funktionsdefinition hat diese Teile:
void(englisch für „leer“) ist der Rückgabetyp. Er sagt, dass die Funktion keinen Wert zurückgibt. Sie tut nur etwas: Hier gibt sie zwei Zeilen aus. Später in dieser Lektion schreibst du Funktionen, die einen Wert zurückgeben.- Der Name der Funktion, hier
begruesse. Es gelten dieselben Regeln wie für Namen von Variablen: Buchstaben, Ziffern und_, keine Leerzeichen, und Groß- und Kleinschreibung zählen. Namen aus mehreren Wörtern schreibt man in snake_case, zum Beispielzeige_banner. Wähle einen Namen, der sagt, was die Funktion macht. - Klammern mit
voiddarin. Hier bedeutetvoid, dass die Funktion keine Werte entgegennimmt. Was sonst noch in den Klammern stehen kann, erfährst du bald. - Der Rumpf der Funktion in geschweiften Klammern
{ }, wie der Rumpf vonmainum 4 Leerzeichen eingerückt. Er enthält die Anweisungen, die die Funktion ausführt.
Schreibe die Funktion über main, nicht hinein. In C kann man eine Funktion nicht innerhalb einer anderen Funktion definieren. Wenn du sie in den Rumpf von main schreibst, lässt sich das Programm nicht kompilieren, und der Compiler meldet error: function definition is not allowed here.
Wenn du das Programm mit der neuen Funktion ausführst, gibt es trotzdem nur aus, was main ausgibt. Das ist kein Fehler! Eine Definition sagt nur, was die Funktion tun soll, wie ein aufgeschriebenes Rezept in einem Kochbuch: Noch hat niemand gekocht. In der nächsten Übung bringst du die Funktion zum Laufen.
So schreibst du es:
Anweisungen
- 1
Definiere über
main, anstelle des Kommentars, eine Funktionvoid zeige_banner(void). Ihr Rumpf gibt die drei Zeilen der Nachricht aus:==========,Gut gemacht!und==========. Führe dann das Programm aus: Es gibt weiterhin dasselbe aus wie vorher, weil noch niemand die Funktion aufgerufen hat. So soll es sein.