Se wrote:
> h Dateien.
>
> Präprozessor Anweisungen stehen doch in h Dateien.
OK.
Langsam und zum mitdenken.
Der eigentliche C-Compiler kriegt Header Dateien normalerweise
niemals zu Gesicht.
Bevor der Compiler läuft, nimmt sich der Präprozessor den
Quelltext vor. Den präprozessor kann man sich wie einen
Texteditor vorstellen, der seine Kommandos perverser Weise
aus dem Text bezieht, den er bearbeitet. Alle Zeilen die
mit # beginnen sind Anweisungen an den Präprozessor.
zb. gibt es eine Anweisung
#include
Sie veranlasst, dass der Präprozessor die Zeile mit dem
Inhalt der Datei ersetzt.
Wenn du also hast
global.h
********
main.c
******
1 | #include "global.h"
|
2 |
|
3 | int main()
|
4 | {
|
5 | }
|
dann ersetzt der Präprozessor die #include Zeile mit dem Inhalt
von "global.h" und macht daraus
1 | int a;
|
2 |
|
3 | int main()
|
4 | {
|
5 | }
|
und erst dieses Zwischenergebnis wird dem eigentlichen C-Compiler
zum Frass vorgeworfen.
Was du in den h-Files oder den C-Files hast ist im Grunde
dem Präprozessor völlig egal. Wenn du willst kannst du auch
machen. Dann wird halt vom Präprozessor eine Bitmap Datei
an dieser Stelle hereingezogen. Ob das sinnvoll ist oder
nicht, interessiert den Präprozessor herzlich wenig. In
der Datei steht: den Inhalt der Datei "test.bmp" hier einsetzen,
und genau das macht der Präprozessor.
Daher ist aber auch eine Unterscheidung zwischen Header Files
und Source Files an dieser Stelle nicht sinnvoll, denn:
Der Compiler kriegt sie sowieso nie zu Gesicht.
Wenn du pervers bist, kannst du auch sowas machen
int.h
*****
main.h
******
Klammern.h
**********
Block.h
*******
{ }
und damit dann dein Programm schreiben:
main.c
1 | #include "int.h"
|
2 | #include "main.h"
|
3 | #include "Klammern.h"
|
4 | #include "Block.h"
|
Wenn du selbst mal Präprozessor spielst, und alle include
Zeilen durch den Inhalt der jeweiligen Dateien ersetzt,
dann kommt da raus
und das ist zweifellos ein gültiges C Program.