So hatte ich kürzlich eine Diskussion, in der ich arbeite, in der ich die Verwendung einer doppelten Einschlusswache über eine einzelne Wache in Frage stellte . Was ich mit Doppelwache meine , ist wie folgt:
Header-Datei "header_a.hpp":
#ifndef __HEADER_A_HPP__
#define __HEADER_A_HPP__
...
...
#endif
Wenn Sie die Header-Datei an einer beliebigen Stelle einfügen, entweder in eine Header- oder eine Quelldatei:
#ifndef __HEADER_A_HPP__
#include "header_a.hpp"
#endif
Jetzt verstehe ich, dass die Verwendung des Schutzes in Header-Dateien dazu dient, die mehrfache Aufnahme einer bereits definierten Header-Datei zu verhindern. Dies ist üblich und gut dokumentiert. Wenn das Makro bereits definiert ist, wird die gesamte Header-Datei vom Compiler als "leer" angesehen und die doppelte Einbeziehung wird verhindert. Einfach genug.
Das Problem, das ich nicht verstehe, ist die Verwendung von #ifndef __HEADER_A_HPP__
und #endif
um das #include "header_a.hpp"
. Der Mitarbeiter hat mir gesagt, dass dies den Einschlüssen eine zweite Schutzschicht hinzufügt, aber ich kann nicht erkennen, wie nützlich diese zweite Schicht überhaupt ist, wenn die erste Schicht den Job absolut erledigt (oder?).
Der einzige Vorteil, den ich mir einfallen lassen kann, ist, dass der Linker sich nicht mehr darum kümmert, die Datei zu finden. Soll dies die Kompilierungszeit verbessern (was nicht als Vorteil erwähnt wurde), oder ist hier noch etwas anderes am Werk, das ich nicht sehe?