Was ist der Zweck des Header Guard in C++ in C++ Programm.
Aus dem Netz habe ich herausgefunden, dass dies dazu dient, das Einschließen von Dateien immer wieder zu verhindern, aber wie garantiert Header Guard dies.
zurück
Was ist der Zweck des Header Guard in C++ in C++ Programm.
Aus dem Netz habe ich herausgefunden, dass dies dazu dient, das Einschließen von Dateien immer wieder zu verhindern, aber wie garantiert Header Guard dies.
Stefan C
Der Guard-Header (oder konventioneller “include guard”) soll Probleme verhindern, wenn die Header-Datei mehr als einmal eingebunden wird; z.B
#ifndef MARKER
#define MARKER
// declarations
#endif
Das erste Mal ist diese Datei #include
-ed, die MARKER
Das Präprozessorsymbol ist undefiniert, sodass der Präprozessor das Symbol definiert, und die folgenden Deklarationen werden in den Quellcode aufgenommen, der vom Compiler angezeigt wird. Auf nachfolgende #include
‘s, die MARKER
Symbol wird definiert, und damit alles innerhalb der #ifnde
/ #endif
wird vom Präprozessor entfernt.
Damit dies richtig funktioniert, müssen die MARKER
Das Symbol muss für jede möglicherweise vorhandene Header-Datei unterschiedlich sein #include
-ed.
Der Grund dafür ist, dass es in C / C++ illegal ist, einen Typ oder eine Funktion mit demselben Namen mehr als einmal in einer Kompilationseinheit zu definieren. Der Wächter lässt es zu #include
eine Header-Datei, ohne sich Gedanken darüber zu machen, ob sie bereits enthalten ist. Ohne den Wächter würde das mehrfache Einschließen derselben Header-Datei zu unerwünschten Neudeklarationen und Kompilierungsfehlern führen. Dies ist besonders hilfreich, wenn Header-Dateien dies benötigen #include
andere Header-Dateien.
Kurz gesagt, es tut es nicht verhindern Sie aus #include
-ing eine Datei immer wieder. Vielmehr es erlaubt Sie, dies zu tun ohne Kompilierungsfehler zu verursachen.
Der Zweck von Header Guards besteht darin, Probleme zu vermeiden, bei denen ein Code möglicherweise nur einmal pro Übersetzungseinheit erscheint.
Ein Beispiel ist eine Struktur. Sie können eine Struktur nicht neu definieren, selbst wenn die zweite Definition identisch ist. Wenn Sie also versuchen, Folgendes zu kompilieren:
struct foo { int x; };
struct foo { int x; };
Der Compiler schlägt aufgrund der Neudefinition fehl.
Es kann schwierig sein zu garantieren, dass Sie einen Header nur einmal einfügen (dies passiert, wenn Header andere Header enthalten). Wenn Ihr Header über eine Struct-Definition verfügt, führt dies dazu, dass die Kompilierung fehlschlägt. Header Guards sind der einfache Trick, damit auch ein mehrfach eingebundener Header seinen Inhalt nur ein einziges Mal auftaucht.
Wikipedia gibt eine sehr gute erklärung wie Include Guards funktionieren.
– Assaf Lavie
5. Juni 2010 um 6:18 Uhr
Der akzeptierte Begriff dafür in C++ ist “include guard”.
– Joris Timmermans
4. April 2011 um 7:49 Uhr