Archiv verlassen und diese Seite im Standarddesign anzeigen : die sache mit ifndef
Hi,
ich hab mal den bissel gegoogelt find aber nix geschitet nachdem was ich bissher gefunden hab is das irgendwas um dafor zu schützen das der gleiche code nich 2mal vorkommt oder so...
kann mir das ma wer verklickern
MFG
locai
hi
Du kompilierst dein Programm ja i.d.R. mit gcc (oder g++ bei C++). Davor wird automatisch das Programm cpp (für C Präprozessor) aufgerufen.
Der Präprozessor erfüllt grundsätzlich eine Aufgabe: Text ersetzen. Dies können jetzt zum einen Texte aus #defines sein, oder über #include.
Bei #include macht der Präprozessor nichts anderes als den Text der Datei die über #include angegeben wurde an diese Stelle zu kopieren! Das siehst du ganz schön wenn du mal ein Programm schreibst, da mal eine andere Datei mit #include inkludierst und dann die .c Datei mal mit "cpp" aufrufst. Dann spuckt er dir auf stdout deinen Code incl. den Code von (z.B.) stdio.h aus. Das ganze natürlich etwas aufbereitet, #define Konstanten wurden ersetzt und Kommentare ggf. entfernt, damit es der Compiler einfacher hat.
Also grundsätzlich sollte jetzt klar sein: der Präprozessor macht nichts anderes als Textersetzung. #define Konstanten werden ersetzt. Dateien mit #include werden als Text einfach in den Sourcecode eingebunden. Das wird dann zum Compiler geschickt.
Jetzt gibts natürlich ein Problem wenn du z.B. ein Header-File hast, und das in einem anderen File schon eingebunden wird. Dann würde der Präprozessor den gleichen Code zweimal einfügen, und der Compiler würde dann meckern dass das ganze ja schonmal definiert wurde, etc.
Desshalb macht man in jedem Headerfile folgendes rein:
#ifndef MEINFILE_H
#define MEINFILE_H
/* Code */
#endif
MEINFILE_H ist dabei der Dateiname des Headerfiles, der muss bei jedem Headerfile natürlich anders heissen.
Damit sagt man dem Präprozessor:
Wenn die Konstante MEINFILE_H nicht schon gibt, dann definiere MEINFILE_H und gib den Code darunter zurück. Wenn der Präprozessor ein weiteres mal auf dieses File stößt ist die Bedingung false (weil MEINFILE_H ja schon definiert wurde), und der Code darunter wird nicht inkludiert.
Man nennt das ganze einfach "Schutz vor Mehrfacheinbindung".
Sollte einigermaßen verständlich sein. :D Sollte aber auch in jedem guten C Buch erklärt werden. :rolleyes:
mfg
chrizel
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.