Einzelnen Beitrag anzeigen

OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#11

Re: [C-Präprozessor]

  Alt 24. Okt 2004, 11:40
Ich versuch's nochmal ein wenig anders zu sagen.
Eine Unit ist ein Codemodul, das Funktionen enthält und diese gegebenenfalls exportiert, und das ganze in einem Stück (daher ja auch Unit).
In C/C++ gibt es dieses Konzept nicht. Wenn man Funktionen aus anderen Modulen verwenden will, muss man diese explizit dem Compiler bekannt machen, indem man sie deklariert. Anders als der Delphi-Compiler weiß ein C/C++-Compiler in dem Moment, in dem er ein Codemodul kompiliert, rein gar nichts über die anderen Module, auch wenn er Funktionen, die in diesen anderen Modulen enthalten sind, aufrufen soll. Deshalb muss man ihm die Signatur geben, er vermerkt diese in der Objektdatei, und am Ende (und zwar wirklich als eigenes Programm) muss der Linker, der wiederum gar nichts vom Compiler weiß, diese Signaturen auswerten und hoffen, dass er jede Funktionsdefinition (!) nur einmal angeboten bekommt, weil er sonst im Normalfall nicht weiß, welche Version er verwenden soll.

Aus diesem Grund wird unter Umständen jede Objektdatei, die deine Headerdatei inkludiert, die Definitionen (d.h. den Code) der Funktionen enthalten, genauso als hättest du in jedem Quellcodemodul die Funktion erneut definiert.

Und ich sag's nochmal: In Delphi ist das ganze genauso, mit dem Unterschied, dass du die Deklaration und die Definition in ein und derselben Datei unterbringst, während du in C/C++ eigentlich nur aus Bequemlichkeitsgründen die Deklarationen auslagerst. Ausnahme sind wie oben genannt inline-Funktionen.
Aufgrund der Architektur gehören in C/C++ in Header-Dateien also weder Daten- noch Funktionsdefinitionen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat