Modularisierung
Du möchtest wissen, was Module sind und wie man sie darstellt? Im folgenden Beitrag erklären wir dir die Modularisierung in C.
Inhaltsübersicht
Module C – Aufteilung des Quellcodes in Übersetzungseinheiten
Ganz ähnlich wie du dir, um einen Aufsatz zu schreiben, nicht einfach ein riesiges Blatt nimmst und dieses vollschreibst, können wir auch Quellcode auf verschiedene „Blätter“ aufteilen. Das macht vor allem bei größeren, komplexeren Programmen Sinn, da es die Navigation vereinfacht und es dir sogar ermöglichen kann, Teile deines Codes ohne viel extra Aufwand wieder verwenden zu können.
Dazu müssen wir unseren Code in verschiedene, sogenannte „Übersetzungseinheiten“ aufteilen. Diese müssen alle selbstständig sein, aber nur eine pro Programm darf eine main-Funktion enthalten. Das klingt etwas kompliziert, ist es aber gar nicht. Im Prinzip kannst du dir die einzelnen Module vorstellen wie Puzzlestücke, die zusammengesetzt ein Bild ergeben. Jedes Puzzleteil kann für sich selbst existieren. Aber um einen Sinn zu ergeben, braucht es andere Teile.
C- und Header-Dateien
Alle diese Teile bestehen aus einer c-Datei und einer Dateiform, die wir noch nicht kennen – der Header-Datei. Dateien dieses Typs enthalten Makros, auch symbolische Konstanten genannt, und die Funktionsprototypen der, in der c – Datei definierten Funktionen. Das besondere Modul, das die main-Funktion enthält, nennt man Programmdatei.
Womit wir uns jetzt noch beschäftigen, ist wie wir unsere fertigen Stücke zu einem Ganzen zusammensetzen. Das hängt zwar davon ab, welche Software du für das Programmieren verwendest, aber mit dem gcc Compiler, müssen alle Module mit zugehöriger header-Datei einzeln übersetzt werden. Dazu öffnen wir ganz einfach die Kommandozeile, beziehungsweise unser Terminal und geben folgenden Befehl ein:
gcc -c module.c
Das können wir mit beliebig vielen Modulen so machen und erhalten dabei o-Dateien. Sind wir damit fertig, kannst du auch schon alles zusammenfügen. Dazu benutzt du diesen Befehl:
gcc module.o module_2.c … main.c
Wir haben unser Programm. Wenn du eine Entwicklungsumgebung nutzt, wird sich diese wahrscheinlich um all das kümmern. Aber du solltest trotzdem wissen, wie der ganze Vorgang abläuft. Deswegen schauen wir ihn uns jetzt Stück für Stück an.
Module C: Ablauf des Prozesses
Als erstes kümmert sich der Präprozessor um unseren Quellcode einer Datei und wandelt ihn in erweiterten Quellcode um. Danach nimmt sich der Compiler selbst der Sache an und macht aus unserem erweiterten Quellcode Assemblercode. Dessen Namensvetter, der Assembler mischt sich daraufhin ein und konvertiert den Assembler-Code in Objektcode. Als letzte Partei kommt der Binder, auch Linker genannt, zum Zug. Er verbindet den Objektcode der einzelnen Übersetzungseinheiten, der Programmdatei und der Bibliotheksfunktionen zu lesbarem Maschinencode.
Wenn wir nun alle header-Dateien – da wo wir sie brauchen – eingebunden haben, sollte unser Programm ohne Probleme funktionieren.