Not logged in. · Lost password · Register

Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
Subject: #ifdef
hi,

auszug aus forward.h:

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

was bedeuten die #-teile in diesem fall?
Mikey
SP Team
Avatar
Member since Nov 2002
641 posts
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 ;)
juk
Member since Dec 2003
383 posts
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 :-)

Juergen Kleinoeder
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen