007
19.04.2004, 16:56 Uhr
RHBaum
|
@Torsten W.
Fast Genau ....
Wie gesagt gibt 2 moeglichkeiten ...
Du kannst in der H. Datei deine funktion deklarieren ... und sie auch definieren, also coden .... Wenn du den code fuer alle funktionen / methoden da mitreinpackst brauchst du keine lib mehr mit zupacken. Ist aber nicht sinn der sache bei modularer Programmierung .... :-)
Definierst du in deiner .H datei deine funktionen / Methoden nur, brauchst du den Binaeren code noch dazu, um sie verwenden zu koennen. dieser liegt dann ueblicherweisse in ner Lib (statisch).
Zustaendig fuers zusammenbauen und der Verweise setzen ist der Linker. Der Arbeitet mit sogenannten Symbolen. Diese Symbole sind kryptische zeichenketten mit den namen der Funktionen/methoden drinn, deren Signaturen, und noch anderen Krams. Fuer jede includierte Funktion wird sowas generiert ... und der Linker sucht anhand dieser symbole in den zuglinkten obj dateien (das was der compiler aus deinen c/cpp dateien macht) oder den seperaten Libs (.lib) nach diesen funktionen, merkt sich deren relative position als einsprungpunkt in den binaeren code und setzt diesen Einsprungspunkt an alle stellen wo das Symbol als Aufruf vorkommt (dann wenn er die exe/dll(windows) oder das binary(unix etc...) erzeugt). Beim compilieren zu obj oder lib files werden die symbole also auch schon erzeugt und in der binaeren datei hinterlegt.
Findet er das symbol nicht, kommt der beruchtigte "unresolved symbols" Fehler !
Definierst du eine Funktion komplett im header, wird der code beim erzeugen der obj datei aus der cpp datei erzeugt, die den header includiert. Weiss jetzt nicht genau ob der das nur einmal macht, beim ersten include der h. datei, oder ob er den code der funktionen aus der h. datei bei jeder cpp datei mit in die obj. datei wirft, die die h. datei includiert ....
verwirrend ??? Naja, vielleicht kanns wer verstaendlicher erklaeren .. :p
Ciao ... Dieser Post wurde am 19.04.2004 um 17:01 Uhr von RHBaum editiert. |