Funktionen

Eine Funktion ist zu verstehen als eine funktionale Einheit, die bei Bedarf aufgerufen werden kann und eine gewünschte Funktionalität anbietet. Beispielsweise kann eine Funktion definiert werden, die den Zinseszins einer Geldanlage zu einem bestimmten Zinssatz über eine gegebene Zeitspanne berechnet und das Resultat in eine Variable schreibt. Eine andere Funktion mag den Computer anweisen, einen Text auf dem Bildschirm auszugeben. Eine noch andere Funktion mag bewirken, dass ein Array sortiert wird. Im folgenden Beispiel ist eine Funktion definiert, welche die Addition zweier Zahlen ausgibt:

#include <stdio.h> void print_addition(int a, int b){ printf("%d + %d = %d", a, b, a+b); } int main(){ print_addition(7, 8); return 0; }

7 + 8 = 15

Funktionen sind zu betrachten als abgeschlossene Programmelemente, die auf Wunsch eine bestimmte Aufgabe erfüllen. Die Aufgabe wird erfüllt, indem in einer vom restlichen Programm unabhängigen Umgebung Anweisungen ausgeführt werden, die das gewünschte Ergebnis liefern. Hierbei können in diese geschützte Umgebung Argumente eingespiesen werden, welche dann innerhalb der Umgebung als Parameter verfügbar sind. Wenn eine Funktion einen Wert zurückgibt, nennt man diesen Wert Rückgabewert, oder auf Englisch Return-Value. Im folgenden Beispiel ist eine Funktion definiert, welche die Fläche eines Kreises mit gegebenem Radius berechnet und zurückgibt:

#include <stdio.h> float area(float r){ return r * r * 3.14159; } int main(){ float radius = 5; printf("Area: %f", area(radius)); return 0; }

Area: 78.539749

Details

Eine Funktion bezeichnet eine funktionale Einheit, welche aus gegebenen Eingabedaten (welche Parameter genannt werden) mittels definiertem Code Ausgabedaten (sogenannte return-Values) berechnet. Selbst Operatoren (wie beispielsweise Addition, Multiplikation...) können als Funktionen verstanden werden und in C++ sogar selbst ausprogrammiert werden (siehe Operator-Überladung). Durch eine sequentielle Aufreihung und eine Verschachtelung von Funktionen und Operatoren kann jedes gewünschte Programm geschrieben werden.

Rein semantisch betrachtet sind Funktionen in C und C++ nichts anderes als Werte. Der Wert, den eine Funktion representiert, wird jedoch nicht direkt wie beispielsweise bei einer Variablen aus dem Speicher gelesen, sondern wird durch eine Abzweigung des Programmcodes an einen abgeschlossenen Bereich neu berechnet und als Rückgabewert an die aufrufende Stelle zurückgegeben. Somit wird verständlich, dass eine Funktion nichts anderes als einen erweiterter Typ (bestehend aus Rückgabetyp und Parameterliste) darstellt, der mittels einer Deklaration einem Symbol zugewiesen werden kann.

Funktionsdeklarationen sind sehr vielseitig. Die vielen Möglichkeiten sind im Detail auf der Funktions-Deklarations-Seite beschrieben.

Terminologie

Für Funktionen gibt es viele verfeinerte Begriffe, die jedoch in den Sprachen C und C++ kaum verwendet werden. Der Begriff Prozedur beispielsweise bezeichnet eine Funktion OHNE Rückgabewert. In C und C++ ist die Deklaration einer Prozedur genau gleich wie diejenige einer Funktion, nur dass sie als Rückgabetyp das Keyword void verwendet.

Der Begriff Handler wird hauptsächlich verwendet für Funktionszeiger, wenn sie für sogenannte Callback-Functions eingesetzt werden. Ein Handler ist zu gut Deutsch eine Behandlung. Er wird auch für das Exception-Handling mittels try-catch verwendet. Der Begriff Routine ist zu verstehen als eine beliebige Befehlsfolge, welche jedoch einen in-sich-geschlossenen Charakter hat. Der Terminus wird ebenfalls oftmals verwendet für das Exception-Handling mittels der try-catch-Struktur. Im Unterschied zum Handler bezeichnet eine Routine grundsätzlich immer eine vorliegende, ausprogrammierte Befehlsfolge. Der Begriff Handler wird mit symbolischem Charakter verwendet, da er zum einen für Funktions-Pointer verwendet werden kann, dessen genauer Inhalt nicht zwingend bekannt sein muss, zum anderen, da der Begriff als allgemeiner Überbegriff im Sinne einer beliebigen Behandlung verwendet wird: Das Handling.

Der Begriff Sub-Routine wird in C und C++ nicht verwendet und ist hier nur der Vollständigkeit halber aufgeführt. Im eigentlichen Sinne bezeichnet eine Sub-Routine das, was in C und C++ als Funktion bezeichnet wird, allerdings hat eine Sub-Routine den Charakter einer Hilfs-Funktion. In anderen Programmiersprachen wie beispielsweise BASIC gibt es für Subroutinen eine eigene Kontrollstruktur (GOSUB), welche einen einfachen Sprung an die Adresse der Subroutine ausführt, ohne jedoch den Kontext der Variablen zu ändern. Nach Abarbeitung der Sub-Routine wird zur aufrufenden Funktion zurückgekehrt. Man könnte sagen, der Aufruf einer Sub-Routine ist ein vereinfachter Funktionsaufruf.