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
