Im Gegensatz zu anderen Programmiersprachen macht C keinen Unterschied
zwischen einer Prozedur und einer Funktion. Da jede Prozedur in C einen
Wert liefert, ist jede Prozedur eine Funktion.
Unter einer Funktion wird ein Programmteil verstanden, der aus einer oder mehreren Anweisungen besteht (Funktionen ohne Anweisungen sind erlaubt) und eine bestimmte Aufgabe erfüllt. Die Funktionen können in große Gruppen einteilt werden. Dabei handelt es sich um die:
Ein C-Programm besteht gewöhnlich aus mehreren dieser Funktionen,
mindestens aber aus einer, der main-Funktion. Das ist die
Hauptfunktion, die in jedem Programm zu finden ist.
Zum einen dienen Funktionen dazu, immer wiederkehrende Aufgaben zu einem
Programmgebilde zusammenzufassen. Zum anderen werden Funktionen dazu verwendet,
ein Programm in logisch zusammengehörige Teile zu unterteilen. Dadurch
kann bei der Programmierung Speicherplatz gespart werden. Außerdem
trägt dieses Verfahren dazu bei, dass der Quellcode besser lesbar
und wartbar ist. Als möglicher Nachteil kann sich dadurch aber auch
die Laufzeit eines Programms "vergrößern". Bei den meisten Programmen
fällt dieser Nachteil jedoch nicht ins Gewicht.
Eine Funktion in C wird einfach über ihren Namen, gefolgt von runden Klammern mit eventuellen Parametern, aufgerufen. Es gilt zu beachten, dass die runden Klammern auch dann nicht wegfallen dürfen, wenn keine Parameter übergeben werden sollen.
Funktionen können in Zuweisungen genauso, wie als Argument von
anderen Funktionen auftreten.
Jede Funktion in C generiert intern einen Rückgabewert. Dieser wird der aufrufenden Funktion über die return-Anweisung mitgeteilt. Als Wert der Rückgabe dürfen nur Ausdrücke verwendet werden, die einen einfachen Typ haben. Es ist nicht möglich, Strukturen oder Arrays zu übergeben.
Als Rückgabewert ist eine Konstante, eine Variable, ein komplexer
Ausdruck oder wieder ein Funktionsaufruf zulässig.
Beispiele:
return;
return(3);
return(x);
return(&x);
return(x+y);
return(sin(2));
Die return-Anweisung muss nicht unbedingt am Ende einer Funktion stehen. Sie kann im ganzen Funktionsblock vorkommen. Wird die return-Anweisung ohne Wert verwendet, wird trotzdem ein undefinierter Wert an die aufrufende Funktion zurückgegeben.
Bei der Verwendung von Funktionen ist darauf zu achten, dass sie niemals
auf der linken Seite einer Zuweisung stehen dürfen. Funktionen sind
Adress-Konstanten und keine Variablen. Das heißt, ein Funktionsname
steht für eine Adresse, an der der Funktionskörper im Speicher
abgelegt ist. Aus diesem Grund darf auch der Adress-Operator nie auf einen
Funktionsnamen angewandt werden, da es sich schon um eine Adresse handelt.
Bevor mit einer neuen Funktion gearbeitet werden kann, muss sie zunächst nach bestimmten syntaktischen Regeln definiert werden. Dabei macht eine Funktionsdefinition Angaben über folgende Dinge:
Bild 1 Aufbau einer Funktion (wird noch erstellt)
Es gilt zu beachten, dass nach der Funktionsdeklaration (in der ersten Zeile) kein Semikolon stehen darf. Wird ein Semikolon gesetzt, wird die Funktion als leere Funktion interpretiert, die nichts bewirkt.