9.5 Funktionsdeklaration 

Damit der Compiler überhaupt von einer Funktion Kenntnis nimmt, muss diese vor ihrem Aufruf deklariert werden. Im vorangegangenen Beispiel ist das automatisch geschehen. Zuerst wurde die Funktion hilfe() und anschließend die main()-Funktion definiert.
Sie können aber auch Funktionen schreiben, die hinter der main()-Funktion stehen:
/* func2.c */ #include <stdio.h> void hilfe(void); int main(void) { hilfe(); return 0; } void hilfe(void) { printf("Ich bin die Hilfsfunktion\n"); }
Da hier die Funktion hilfe() erst hinter der main()-Funktion geschrieben wurde, müssen Sie den Compiler zur Übersetzungszeit mit dieser Funktion bekannt machen. Sonst kann der Compiler in der main()-Funktion mit hilfe() nichts anfangen. Dies stellen Sie mit einer sogenannten Vorwärtsdeklaration sicher:
void hilfe(void);
Die Deklaration wird im Gegensatz zur Funktionsdefinition mit einem Semikolon abgeschlossen. Funktionsdeklarationen sollten aber nicht nur dann vorgenommen werden, wenn die Funktionen hinter die main()-Funktion geschrieben werden. Es ist ja auch möglich, dass eine Funktion andere Funktionen aufruft. Funktionen können Sie auch als unterschiedliche Formen der main()-Funktion betrachten. Sehen Sie sich im Beispiel an, was gemeint ist:
/* func3.c */ #include <stdio.h> void func1(void); void func2(void); void func3(void); void func1(void) { printf("Ich bin func1 \n"); func3(); } void func2(void) { printf("Ich bin func2 \n"); } void func3(void) { printf("Ich bin func3 \n"); func2(); } int main(void) { func1(); return 0; }
Hätten Sie hier keine Vorwärtsdeklaration mit
void func1(void); void func2(void); void func3(void);
vorgenommen, hätte der Compiler beim Übersetzen (Kompilieren) Probleme mit der Funktion func1() gehabt. Denn in func1() steht der Funktionsaufruf func3(). Dem Compiler ist bis dahin eine solche Funktion noch unbekannt, da diese erst weiter unten im Quellcode implementiert wird.
Ein weiterer Grund für die Erstellung einer Vorwärtsdeklaration ist der Austausch von Funktionen über die Dateigrenzen hinweg. Aber dazu später mehr in Abschnitt 9.19, »Getrenntes Kompilieren von Quelldateien«.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.