Bei größeren Programmen ist es aus Gründen der Übersichtlichkeit sinnvoll, den Quelltext in mehrere Dateien aufzuteilen. Meistens werden die Unter-Funktionen in separate Dateien – sogenannte Header-Dateien – ausgegliedert. In dem Hauptprogramm, also die Quelltext-Datei mit der main-Funktion, werden die Quelltext-Dateien mit der Präprozessor-Anweisung #include eingebunden. Hier wird der Dateiname der Quelltext-Datei in Hochkommas „ gesetzt.
In diesem Beispiel wurden die Funktionen mult zum Multiplizieren und add zum Addieren in einer Header-Datei namens funktionen.h ausgegliedert. Die Hauptprogramm-Datei beispiel.c bindet die Datei funktionen.h über die #include-Anweisung ein.
/* Datei beispiel.c */ #include<stdio.h> #include "funktionen.h" int main() { printf("Produkt: %d\n", mult(4, 5)); printf("Summe: %d\n", add(4, 5)); return 0; }
/* Datei funktionen.h */ int mult(int a, int b) { return a * b; } int add(int a, int b) { return a + b; }
Produkt: 20 Summe: 9
Mehrfacheinbindung vermeiden
Bei größeren Projekten könnte es unter Umständen vorkommen, dass man versucht, Header-Dateien mehrmals einzubinden. Diese Fehlerquelle kann man mit der bedingten Kompilierung vorzubeugen. Hierbei wird der Quelltext der Header-Datei nur ausgewertet, wenn eine symbolische Konstante in der Header-Datei noch nicht definiert wurde. Bei der Abarbeitung der Header-Datei wird diese symbolische Konstante definiert. Beim zweiten Versuch, die Header-Datei auszuwerten, ist die Bedingung zur Auswertung nicht mehr wahr. Der Name der symbolischen Konstanten richtet sich nach dem Namen der Header-Datei, wobei der Punkt durch einen Unterstrich ersetzt wird.
/* Datei funktionen.h */ #ifndef FUNKTIONEN_H #define FUNKTIONEN_H int mult(int a, int b) { return a * b; } int add(int a, int b) { return a + b; } #endif