000
06.11.2006, 19:41 Uhr
~Gast
Gast
|
hi
ich habe leicht Verständnissprobleme mit dem Begriff Translation Unit (bezogen auf C);
in der Literatur von Bruce Eckel (TIC 2nd Edition) und in anderen Quellen wird eine Translation Unit (TU) folgendermaßen beschrieben:
1) Each separate C implementation file (with an extension of .c) is a translation unit. That is, the compiler is run separately on each translation unit, and when it is running it is aware of only that unit.
=> hier verstehe ich als TU eine C-Source-Datei an sich, eine Datei, aus der der Compiler den Code / Text des Progs erstellt, also Dateien, mit Funktions-DEFINITIONEN und Dateien, in denen einfach Variablen definiert werden (-> Speicherplatzreseriverung);
Compiler hier im Sinne aller "Teile eines Übersetzers", die vor dem Linker aktiv sind ?!?!?! somit sind für mich anhand dieser Definition KEINE TUs: - stand-alone Header-Files
- Dateien, die nur Definitionen von 'user-defined' Datentypen (z.B. Structs) enthalten, also keine Speicherplatz-Reservierung fürs Programm verursachen (wobei solche Dateien nicht viel Sinn machen, oder !?)
- Object-Files und somit keine "vorübersetzten" Libraries, weil beide keine Implementation-Files (Endung .c) sind, sondern bereits "vom Compiler übersetzte" Object-Files (Compiler-Arbeit im o.g. Sinne ist bereits getan), auf denen nun nur noch der Linker arbeitet (im Gegensatz zum Compiler im o.g. Sinne!!!)
=> weiterhin würde ich im Sinne der Definition als TUs auffassen:
- obige eigene Interpretation einer TU + deren inkludierte Header-Files - Libraries, die im Source-Code vorliegen, also nicht vor-kompiliert sind (solls auch für C geben), weil sie (da nicht-vorkompiliert) zusammen mit der sie referenzierenden Source-File (Endung .c) zusammen in ein Object-File übersetzt würden !?!?!? => in diesem Fall bestünde also eine Object-File aus Source - Library-Source, oder ginge dies nicht, dh. müssen Libraries, die als Source-Files separat kompiliert werden ?!?!?!
2) For each translation unit, the compiler creates an object file, with an extension of ".o" or ".obj" or something similar. These object files, along with the necessary start-up code, must be collected by the linker into the executable program.
=> diese Definition bestätigt mein oben genanntes eigenes Verständnis einer TU
3) Ein C-Programm besteht im Allgemeinen aus mehreren separat übersetzbaren Dateien: Programm = translation-unit { translation-unit }
=> hier scheint eine TU jede Object-File zu sein, also widerspricht den ogiben Ausführungen (TU = Endung .c)
Weiterhin, wurde die Definition einer TU für C++ erweitert oder anderweitig modifiziert !?!?
Schließlich gibt es in C++ viele neue Konzepte, z.B. Namespaces, Klassen (also Kapselung von "Funktionen"), etc. ?!?!?
Danke schon mal im Voraus für die Mühe. |