Übersetzungseinheit
# Übersetzungseinheit

Bei der Programmierung in C/C++ ist die Übersetzungseinheit die endgültige Eingabe an den Compiler, aus welcher die Objektdatei erstellt wird. Sie ist die Ausgabe des Präprozessors. Analog wird die endgültige Eingabe an den Präprozessor als Präprozessor-Übersetzungseinheit bezeichnet.

Konkret bedeutet dies für eine Quelldatei, dass Header-Dateien eingebunden werden (Präprozessor-Übersetzungseinheit), Codezeilen im Rahmen der bedingten Kompilierung ignoriert und Makros durch zugehörige Anweisungen ersetzt werden. Daraus folgt auch, dass C- und C++-Compiler nicht die eigentliche Quelldatei kompilieren, sondern die Übersetzungseinheit. In C++ bilden Klassen meistens jeweils eine Übersetzungseinheit.

## Erläuterung

Ein C/C++-Programm besteht aus Quelldateien, die zusätzlich zum eigentlichen Code Präprozessor-Direktiven enthalten. Der Präprozessor erstellt aus den Quelldateien Übersetzungseinheiten.

Die aus der Übersetzungseinheit entstehenden Objektdateien können gelinkt werden, woraufhin oft eine ausführbare Datei erstellt wird.

Die Präprozessor-Übersetzungseinheit entsteht, indem lediglich die Header-Dateien tatsächlich eingebunden werden.

Man beachte, dass Präprozessoren und damit auch das Konzept der Übersetzungseinheit theoretisch nicht nur auf C/C++ beschränkt ist.

### Sichtbarkeitsbereich (Scope)

Übersetzungseinheiten bilden einen Sichtbarkeitsbereich (engl. scope), der manchmal auf Englisch etwas ungenau file scope genannt wird.

Elemente, die nur innerhalb einer Übersetzungseinheit sichtbar sind, haben sogenanntes internal linkage, während Elemente, die im gesamten Programm sichtbar sind, external linkage besitzen, d. h. sie werden vom Linker in Betracht gezogen.

### Struktur

Der Großteil des Codes in einem Projekt wird in den Quelldateien gespeichert mit der Dateiendung .c (oder .cpp, .c++ bzw..cc für C++).

Außerdem besitzen die Quelldateien meistens eine Header-Datei mit der Dateiendung .h (seltener auch .hpp und .hh in C++).

Header-Dateien werden auch häufig von anderen Header-Dateien inkludiert.

