Phasen der Übersetzung

C- und C++-Programme bestehen aus mindestens einer Quelldatei, von denen jede einen Teil des Texts des Programms enthält. Eine Quelldatei wird zusammen mit ihren Includedateien, Dateien,#include die mithilfe der Präprozessordirektive enthalten sind, aber keine Codeabschnitte enthalten, die durch bedingte Kompilierungsdirektiven wie entfernt wurden, als Übersetzungseinheit #ifbezeichnet.

Quelldateien können zu unterschiedlichen Zeiten übersetzt werden. Tatsächlich ist es üblich, nur veraltete Dateien zu übersetzen. Die übersetzten Übersetzungseinheiten können in separate Objektdateien oder in Objektcodebibliotheken verarbeitet werden. Diese separaten, übersetzten Übersetzungseinheiten werden anschließend verknüpft, um ein ausführbares Programm oder eine Dynamic Link Library (DLL) zu bilden. Weitere Informationen zu Dateien, die als Eingabe für den Linker verwendet werden können, finden Sie unter LINK-Eingabedateien.

Übersetzungseinheiten können mit folgenden Methoden kommunizieren:

  • Aufrufe der Funktionen, die über eine externe Bindung verfügen.

  • Aufrufe der Klassenmemberfunktionen, die über eine externe Bindung verfügen.

  • Direkte Änderung von Objekten, die über eine externe Bindung verfügen.

  • Direkte Änderung von Dateien.

  • Prozessübergreifende Kommunikation (nur für Microsoft Windows-basierte Anwendungen).

Die folgende Liste beschreibt die Phasen, in denen der Compiler Dateien übersetzt:

Zeichenzuordnung
Zeichen in Quelldatei werden zur internen Quelldarstellung zugeordnet. Trigraphsequenzen werden in dieser Phase in die interne Einzelzeichendarstellung konvertiert.

Zusammenführen von Zeilen
Alle Zeilen, die mit einem schrägen Schrägstrich (\) unmittelbar gefolgt von einem Zeilenumleitungszeichen enden, werden mit der nächsten Zeile in der Quelldatei verbunden und bilden logische Zeilen aus den physischen Zeilen. Wenn sie nicht leer ist, muss eine Quelldatei mit einem Neulinienzeichen enden, dem kein zurücker schräger Schrägstrich voran steht.

Tokenisierung
Die Quelldatei wird in Vorverarbeitungstoken und Leerstellenzeichen unterteilt. Kommentare in der Quelldatei werden jeweils durch ein Leerzeichen ersetzt. Zeilenumbruchzeichen werden beibehalten.

Preprocessing (Vorverarbeitung)
Vorverarbeitungsanweisungen werden ausgeführt, und Makros werden in die Quelldatei erweitert. Die #include-Anweisung ruft die Übersetzung auf, die mit den vorherigen drei Übersetzungsschritten für jeden enthaltenen Text beginnt.

Zeichensatzzuordnung
Alle Quellzeichensatzmember und Escapesequenzen werden in ihre Äquivalente im Ausführungszeichensatz konvertiert. Für Microsoft C und C++ sind sowohl die Quell- als auch Ausführungszeichensätze ASCII.

Zeichenfolgen-Verkettung
Alle angrenzenden Zeichenfolgen und breiten Zeichenfolgenliterale werden verkettet. "String " "concatenation" wird beispielsweise zu "String concatenation".

Übersetzung
Alle Token werden sowohl syntaktisch als auch semantisch analysiert. Diese Token werden in Objektcode konvertiert.

Verknüpfung
Alle externen Verweise werden aufgelöst, um ein ausführbares Programm oder eine Dynamic Link Library zu erstellen.

Der Compiler gibt während Phasen der Übersetzung, in denen er auf Syntaxfehler trifft, Warnungen oder Fehler aus.

Der Linker löst alle externen Verweise auf und erstellt ein ausführbares Programm oder eine DLL, indem mindestens eine getrennt verarbeitete Übersetzungseinheit mit Standardbibliotheken kombiniert wird.

Siehe auch

Präprozessor