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.

  1. der Präprozessor (engl.: preprocessor)
  2. der Compiler
  3. der Assembler
  4. 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.