#ifdef

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

#ifdef
hi,

auszug aus forward.h:

#ifndef _FORWARD_H_
#define _FORWARD_H_
int forward(int,int);
#endif

was bedeuten die #-teile in diesem fall?


wenn FORWARD_H nicht definiert dann binde alles ein bis zum endif → als erstes wird dann FORWARD_H definiert

damit wird verhindert dass das include mehrfach eingebunden wird, beispielsweise bei verschachtelung oder auch unachtsamkeit :wink:


wobei man zugeben muss, dass das in diesem Fall eigentlich voellig
ueberfluessig ist.
Ob man die forward-Funktion einmal oder zweimal oder 10mal deklariert
ist dem Compiler egal (solange man sie immer gleich deklariert).

Bei komlexeren include-Dateien (z.B. stdio.h) ist es aber durchaus
problematisch das ganze Teil zwei mal zu includieren.
Da werden z.B. Funktionen deklariert und dann weiter hinten unter dem gleich Namen
Makros definiert. Wenn der cc da ein zweites mal drueber laufen wuerde, gaeb’s Chaos.
Kritischer wird’s natuerlich auch, wenn eine include-Datei andere include-Dateien
includiert. Da kann’s dann schon mal zu includes im Kreis rum kommen.

So lange nur Funktions-, Struktur-, Typ oder (extern-)Variablen-Deklarationen
in einer include-Datei stehen muessten mehrfaches include eigentlich unproblematisch sein.

Bei komplexeren include-Dateien findet man dieses
#ifdef _XXX_h
#define _XXX_h

#endif _XXX_h
Konstrukt deshalb eigentlich immer um von vorneherein jeden Aerger auszuschliessen.

Wenn man’s ehrlich betrachtet macht man das aber letzlich immer nur, um
schlimmere Auswirkungen von irgendwelchen Schweinerein, die man gemacht
hat, einigermassen im Griff zu halten.
Guter Code duerfte sowas eigentlich gar nicht brauchen.
(Die Java-Leute wussten schon warum sie den Praeprozessor weggelassen haben :slight_smile:

Juergen Kleinoeder