C-Programmierung

Header Und Module

Sieb des Eratosthenes | | Modulgraph

Der Compiler erzeugt aus einer Quelldatei (Suffix .c) ausführbaren Maschinencode. Letzteren bezeichnet man als Objectcode (Suffix .o). Eine einzelne übersetzte C-Quelldatei nennt man Modul. Ein C-Programm besteht in der Regel aus einem Hauptmodul und mehreren Modulen, welche das Programm in ihre Komponenten gliedert. Die Zusammenfassung von mehreren Modulen nennt man Bibliothek (Suffix .a).

Jedes Modul besteht aus zwei Bestandteilen, dem sog. Modul-Header und der sog. Modul-Implementierung.

Die sogenannten Header-Dateien (oder einfach nur Header) beinhalten für jedes Modul die Funktionsprototypen inkl. aller notwendigen Konstanten, Definition und Macros (Suffix .h). Dies stellt die Schnittstelle zwischen den Modulen dar.

Die sog. Implementierung eines Moduls (Suffix .c) enthält zu den Prototypen die passende Implementierung, d.h. die passenden Funktionsrümpfe eines Moduls.

Der Compiler erzeugt nun aus jeder Implementierung eines Moduls und den benutzten Schnittstellen den übersetzten Objektcode des Moduls.

Die Implementierung eines Moduls kann Funktionsreferenzen auf prototypisch definierte Funktionen aus der Schnittstelle zu einem anderen Modul enthalten. Bei der Compilation des Moduls ist die Implementierung dieser Referenzen noch unbekannt. Man spricht von unbekannten Symbolen oder Referenzen. Ein Modul für sich alleine ist daher unvollständig.

Bei der Erstellung eines vollständigen ausführbaren Programms müssen die unbekannten Referenzen aufgelöst werden, indem eine entsprechende Implementierungen zur Verfügung gestellt wird.

Dies geschieht durch die Verbindung (Linkage) derjenigen Module, welche die fehlenden Implementierungen enthalten. Diesen Vorgang nennt man Binden oder Linken. Die Arbeit erledigt der sogenannte Linker, welcher integraler Bestandteil des Compilers bzw. der sog. Compiler-Toolchain ist.

Der Linker ersetzt also die unbekannten Referenzen in einem Modul B durch die Referenz auf die bekannte Implementierung aus einem anderen Modul A. Man spricht dann von einer Abhängigkeit des Moduls B von Modul A (Dependency).

Man sagt auch, dass die unbekannten Referenzen von Modul B durch Modul A aufgelöst werden. Andernfalls spricht man von einer unaufgelösten Referenz (unsolved symbol). In diesem Fall ist der Linker nicht in der Lage ein vollständiges Programm zu erstellen.

Sieb des Eratosthenes | | Modulgraph

Options: