C wie auch C++ sind sog. Compilersprachen. Wenn Ihnen ein Quelltext vorliegt,
zu welchem Sie ein abarbeitungsfähiges Programm erhalten wollen, so müssen Sie diesen Quelltext einer Verarbeitung
unterziehen lassen. Auch wenn Sie hierzu vielleicht nur eine einfache Tastenkombination oder einen Mausklick aktivieren,
werden bis zum Erhalt der Programmdatei mehrere verschiedene Werkzeuge ihre Arbeit tun.
Unter den Betriebssystemen DOS, Windows und OS/2 besitzen solche Programmdateien typischerweise die
Dateinamenerweiterung (Suffix) EXE (von executable=ausführbar).
Unter Unix ist der Dateiname beliebig.
Als Werkzeuge zur Überführung eines C/C++ Quelltextes in eine ausführbare Programmdatei dienen folgende
Programme in der aufgeführten Reihenfolge.
- der Präprozessor (engl.: preprocessor)
- der Compiler
- der Assembler
- der Linker (deutsch: Binder)
- Präprozessor
- Dieser erstellt eine temporäre Datei, die der Compiler anschließend übersetzt. Dazu verwendet der
Präprozessor den Quelltext, den er nach sog. Präprozessordirektiven absucht und bearbeitet, indem er solche
Direktiven geeignet ersetzt. Solche Direktiven beginnen in C/C++ mit einem Doppelkreuz '#'.
Die am häufigsten verwendeten Direktiven und ihre wichtigsten Wirkungen sind
- #include ...
- zur Einbeziehung geeigneter Beschreibungsdateien (header files) in den Übersetzungsvorgang. Der Präprozessor ersetzt in der
temporären Datei die #include-Direktive durch den Inhalt der darin aufgeführten Beschreibungsdatei.
- #define ...
- zur Definition eines Konstantennamens mit der Festlegung dessen Wertes oder
zur Deklaration eines Namens, mit Hilfe dessen Teile des Quelltextes bedingt übersetzt werden können.
- #undef ...
- zur Erklärung der Ungültigkeit eines Namens, um diesen Namen neu definieren zu können oder um die
bedingte Übersetzung zu beeinflussen.
- Compiler
- Dieser übersetzt die vom Präprozessor erstellte Datei. Das Resultat ist ein Assembler-Quelltext, welcher bei Bedarf
untersucht und überarbeitet werden kann. In vielen Fällen bleibt dieser Assembler-Quelltext jedoch unberührt und
wird später automatisch gelöscht.
Falls der Compiler die ihm übergebene Datei nicht übersetzen kann, weil darin Syntaxfehler vorkommen, so erzeugt er
entsprechende Fehlermeldungen. Der Assembler-Quelltext steht dann nicht zur Verfügung.
Außerdem gibt der Compiler Warnungen aus, wenn er Unerwartetes vorfindet bzw. etwas zu fehlen scheint, aber kein
syntaktischer Fehler vorliegt.
- Assembler
- Dieser übersetzt den vom Compiler erzeugten Assembler-Quelltext und erzeugt daraus die sog. Objekt-Code-Datei.
Diese Datei ähnelt schon sehr der noch nicht vorliegenden ausführbaren Programmdatei. Objekt-Code-Teile aus
Bibliotheken sind darin noch nicht enthalten.
- Linker
- Dieser bindet einzelne Teile des Objekt-Codes und weitere Objekt-Code-Teile aus fertigen
Bibliotheken (engl.: libraries) zu einer ablauffähigen Programmdatei zusammen.