Das ist natürlich total humbug, dass eine Headerdatei auch nur irgendwie kompiliert wird.
Wie soll denn das gehen???
Es läuft so ab:
in einer .cpp oder .c Datei steht ein
In diesem Beispiel in der Error.cpp
#include Error.h
[/php]
dieses kopiert der Präprozessor dann in die Error.cpp Datei, die included hat. (Das tut er nebenbei bis er alle befehle abgearbeitet hat, und zwar von oben bis unten.)
Das nennt man das Forwarding! Dies bezweckt, dass ich eine Funktion auifrufen kann, obwohl ich sie selbst noch nicht beklariert habe.
Wenn er damit fertig ist, dann kommt der Kompieler.
Aber woher weiß mein Kompieler dann, wo die Funktion ist, die er in der Headerdatei stehen hat?
Das ist relativ einfach. Ein Compiler gibt jeder Funktion nach dem Namen eine Eindeutige kennung beim Kompilieren.
[php|
Z.B so: iLinkError@Error@@QAEXHH@Z
Diese Funktion lautet :
void LinkError(int i, int y);
So sieht es z.B. auch aus, wenn ein Kompiler ein nichtaufgelöstes externes Symbol ausgibt.
"public: void __thiscall Error::LinkError(int,int)" (?LinkError@Error@@QAEXHH@Z)
[/php]
Später tauchen diese Namen dann in so genannten .lib oder auch .dll Datein auf.
[b]Dennoch wird aber nie eine Headerdatei kompiliert, nein sie ist eher ein inhaltsverzeichniss, die vor die .cpp Datei gehängt ist, da #include ja eindeutig eine Präprozessor Anweisung ist.
[/b]
wenn etwas nicht verständlich war, einfach nachfragen!!!