Zweck der Header Guards

Lesezeit: 2 Minuten

Zweck der Header Guards
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.

  • 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

Zweck der Header Guards
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.

904530cookie-checkZweck der Header Guards

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy