Cee Übersetzungseinheit
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
KurtWatzka antwortet auf eine Frage von Christian Palmes in news:de.comp.lang.c, Donnerstag 11.10.2001, "Re: h. Dateien typedef-struct" (mit seinem Einverständnis hier zitiert) -- HelmutLeitner
[...]Und die Definition kann in einer anderen Übersetzungseinheit erfolgen als die Verwendung. In der Übersetzungseinheit, die eine Funktion verwendet, steht entweder
- ein Prototyp-Definition (am besten mit interner Bindung) oder
- eine Prototyp-Deklaration.
In diesem zweiten Fall kann die Definition in einer anderen Übersetzungseinheit erfolgen.
- >Kannst Du das mit der Übersetzungseinheit bitte genauer erklären? [--Christian Palmes]
Ein Quelltext, nachdem der Präprozessor seine Arbeit verrichtet hat.
Ein Quelltext nach Auflösung aller #include-Präprozessordirektiven
ist eine "preprocessing translation unit". Wenn der Präprozessor
(konzeptionell) seine Arbeit verrichtet hat, heisst das Ergebnis
"translation unit" was ich mit "Übersetzungeinheit" ins Deutsche
zu übertragen versucht habe. Nicht alle Übersetzungseinheiten müssen zur gleichen Zeit übersetzt werden. Bereits übersetzte Übersetzungseinheiten können entweder einzeln oder in Bibliotheken aufbewahrt werden.
Ein Programm kann aus mehreren Übersetzungseinheiten zusammengesetzt sein.
- >Verstehe ich das so richtig:
- >help.h // Datei mit Deklarationen
- >help.c // Definitionen der Deklarationen
Und, wenn immer möglich mit help.h als include, damit Deklarationen und Definitionen gegeneinander geprüft werden können.
- >main.c // Hauptprogramm mit help.h als include
- >main.c --> main.obj (Kompilierung)
- >help.c --> help.obj (Kompilierung)
- >main.obj, help.obj --> main.exe (Link)
- >Meinst Du das?
Ein bisschen abstrakter meine ich das. Deine Übersetzungseinheiten sind die beiden Texte, die aus main.c und help.c entstehen, wenn alle Präprozessor-Direktiven abgearbeitet sind. Bis dahin ist folgedes passiert:
- Zeichen des Quelltextes werden auf das "source character set" abgebildet. Alle Zeichen im Quelltext, die nicht im "source character set" vorkommen, werden durch einen "universal-character-name" ersetzt.
- Trigraphen werden durch die entsprechenden Zeichen ersetzt.
- \-zeichen, auf die unmittelbar ein Zeilenende folgt, werden zusammen mit dem Zeilenende entfernt und damit werden Zeilen verkettet.
- Der Text wird in Präprozessor-Tokens und "white-space" zerlegt. Kommentare zählen als "white-space" und werden durch ein Leerzeichen ersetzt. Mehrere aufeinander folgende "white-space" Zeichen können durch ein einzelnes "white-space"-Zeichen ersetzt werden.
- Präprozessor-Direktiven werden ausgeführt, Macros werden ersetzt. Wenn eine Präprozessor-Direktive eine #include-Direktive ist, wird rekursiv alles bis einschliesslich der Ausführung der Präprozessor-Direktiven für die mit #include eingeschlossene Datei abgearbeitet.
Das Ergebnis enthält keine Präprozessor-Direktiven mehr. Diese
Verarbeitungsschritte müssen nicht einzeln nacheinander ablaufen,
aber das Ergebnis muss so aussehen, als ob sie einzeln und nacheinander abgelaufen wären.
Kurt (-- KurtWatzka)
KategorieC KategorieCee
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 29. November 2007 8:33 (diff))