elif = else if ?

Gast #559021
Lesenswert?
• ▲
▼
>Präprozessor Anweisungen stehen doch in h Dateien.

Wenn die bei dir nur in .h-Dateien stehen, dann ist das bei dir so. Das 
ist allerdings nicht vorgeschrieben, und es gibt auch viele sinnvolle 
Anwendungen von Präprozessor-Anweisungen in .c-Dateien.

Also: C-Buch besorgen UND lesen.

Oliver
#559025
Lesenswert?
• ▲
▼
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
********
1
int a;

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
1
#include "test.bmp"

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
*****
1
int

main.h
******
1
main

Klammern.h
**********
1
()

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
1
int
2
main
3
()
4
{ }

und das ist zweifellos ein gültiges C Program.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren