2020
Funktionen (C)

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:

FunktionstypRückgabewertParameterCode-Beispiel
Funktion ohne Rückgabe, ohne ParameterKeineKeinevoid func1() { printf("Hallo Welt!"); }
Funktion ohne Rückgabe, mit ParameterKeine1 oder mehrvoid func2(int x) { printf("Wert: %d", x); }
Funktion mit Rückgabe, ohne ParameterJaKeineint func3() { return 42; }
Funktion mit Rückgabe, mit ParameterJa1 oder mehrint 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.