Funktionen (C)
Datum: Februar 2020
Lesedauer: 4 Minuten
Programmiert man etwas, so schreibt man nicht den ganzen Code in einem Anweisungsblock, sondern zerlegt das Programm in mehrere Unterprogramme (Funktionen).
In diesem Blogpost erläutere ich die Funktionen anhand C. Dies ist jedoch nicht die einzige Programmiersprache, bei welcher man gebrauch von Funktionen machen kann. Die Syntax unterscheidet sich jedoch von Sprache zu Sprache.
Jeder, der einmal ein C Programm geschrieben hat, der hat schon eine Funktion gesehen. Die main-Funktion. Von der main-Funktion werden alle Funktionen aufgerufen.
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello world!\n");
return 0;
}
Auch printf()
, scanf()
, usw, sind Funktionen, welche wir aufrufen können.
Was sind Funktionen?
Was sind Funktionen? Wozu braucht man sie?
Funktionen können einem das Leben erleichtern. Will ich z. B. mehrmals "Hello World" ausgeben, so muss ich den Text immer wieder separat ausgeben. Dies sieht weder schön aus, noch ist es wartbar. Muss ich jetzt den Text in "Hallo Welt" ändern, so muss ich jeden einzelnen printf
Befehl umschreiben. Dies ist mühsam und kostet viel Zeit.
Diese Probleme kann man mit Funktionen umgehen. Schreibt man das Ausgeben des Textes in eine Funktion, so muss man sie nur noch aufrufen. Bei jedem Aufruf wird der Text dann ausgegeben. Hat man eine Funktion erstellt, so muss man den Text nur noch einmal ändern.
Funktionen bringen also viele Vorteile mit sich. Sie machen den Code einfacher zu lesen, zu verstehen und zu warten.
Das Programm dazu würde dann folgendermassen aussehen:
(Jetzt geht es erst um das Verständnis. Die genaue Syntax wird weiter unten noch erklärt.)
#include <stdio.h>
#include <stdlib.h>
void hallo(void) {
printf("Hello World");
}
int main() {
hallo();
}
In Zeile vier beginnt die Funktion. "Hello World" wird in Zeile fünf programmiert. In der neunten Zeile wird die Funktion mit hallo()
aufgerufen. Erst jetzt werden die Befehle in der Funktion durchgeführt. Ohne hallo()
würde nichts in der Konsole stehen.
Syntax
Beim Schreiben von Funktionen muss man darauf achten, ob die Funktion etwas erhalten oder zurückgeben kann. Man darf sich vom Rückgabewert nicht verwirren lassen. printf()
gibt keinen Wert zurück, sondern einen aus.
Eine standard Funktion definiert man folgendermassen.
<Datentyp> <Funktionsname>([<Parameter>]) {}
Zu Beginn muss ein Datentyp angegeben werden, wenn die Funktion etwas zurückgeben soll. Darauf folgt der Funktionsname. Diesen kann man selber wählen. Zum Schluss kann man noch einen oder mehrere Parameter angeben. Diese sind nur nötig, wenn man der Funktion etwas übergeben will. Den Datentyp und Parameter kann man mit void
ersetzen, wenn man sie nicht benötigt.
Aufruf
Eine Funktion ruft man wie folgt auf:
<Funktionsname>([<Parameter>]);
Arten
Es gibt vier Arten von Funktionen:
Funktionstyp | Rückgabewert | Parameter | Code-Beispiel |
---|---|---|---|
Funktion ohne Rückgabe, ohne Parameter | Keine | Keine | void func1() { printf("Hallo Welt!"); } |
Funktion ohne Rückgabe, mit Parameter | Keine | 1 oder mehr | void func2(int x) { printf("Wert: %d", x); } |
Funktion mit Rückgabe, ohne Parameter | Ja | Keine | int func3() { return 42; } |
Funktion mit Rückgabe, mit Parameter | Ja | 1 oder mehr | int func4(int a, int b) { return a + b; } |
Vorausdeklaration
Falls beim Ausführen des Programmes die Funktion unbekannt ist, kann das daran liegen, dass sie nicht vor dem Aufruf definiert wurde. Die Applikation wird von oben nach unten ausgeführt. Drum muss die Funktionsdeklaration immer vor dem Aufruf getätigt werden.
Beispiel
#include <stdio.h>
#include <stdlib.h>
float zahlEinlesen() {
int zahl;
printf("Bitte geben Sie eine Zahl ein: ");
scanf("%d", &zahl);
return zahl;
}
void resultatAusgeben(int res) {
printf("Das Ergebnis ist: %d", res);
}
void grafikAnzeigen(int anzahl) {
int count = 0;
while (count < anzahl) {
printf("*");
count++;
}
}
int main() {
printf("Funktionen\n");
printf("----------------\n");
int summe = zahlEinlesen() + zahlEinlesen();
printf("----------------\n");
resultatAusgeben(summe);
printf("\n");
grafikAnzeigen(summe);
printf("\n");
return 0;
}
Dieses Programm liest zwei Zahlen ein und addiert diese anschliessend. Zudem gibt es die Anzahl der Summe als Sternchen aus.
Es hat drei Funktionen:
zahlEinlesen()
: Fragt nach einer Zahl, speichert diese in einer Variable und gibt das Resultat zurück.resultatAusgeben(int res)
: Gibt das Ergebnis, welches man beim Aufruf übergeben muss, aus.grafikAnzeigen(int anzahl)
: Zeichnet eine, dem Resultat entsprechende, Anzahl von Sternchen auf der Konsole.
In der main-Funktion wird zuerst "Funktionen" ausgegeben und unterstrichen.
Danach wird zweimal die Funktion zahlEinlesen()
aufgerufen. Diese Funktion liest die Zahlen ein und gibt den eingelesenen Wert mit return
zurück. Die beiden Werte werden addiert und in die Variable summe
geschrieben.
Danach wird die Funktion resultatAusgeben
aufgerufen. Als Parameter wird summe
(die Summe der eingegebenen Werten) übergeben. Die Funktion gibt jetzt das Resultat, welches in summe
steht, aus.
Als letztes wird noch grafikAnzeigen
ausgeführt. Auch hier wird summe
übergeben. Jetzt werden Sternchen in die Konsole geschrieben, bis count
gleich gross ist, wie die summe
.