Traditionell war / ist die standardmäßige und tragbare Methode zur Vermeidung mehrerer Header-Einschlüsse in C ++ die Verwendung des #ifndef - #define - #endif
Pre-Compiler-Direktiven-Schemas, das auch als Makro-Guard-Schema bezeichnet wird (siehe Code-Snippet unten).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
In den meisten Implementierungen / Compilern (siehe Bild unten) gibt es jedoch eine "elegantere" Alternative, die denselben Zweck erfüllt wie das aufgerufene Makro-Guard-Schema #pragma once
. #pragma once
hat im Vergleich zum Makro-Guard-Schema mehrere Vorteile, darunter weniger Code, die Vermeidung von Namenskonflikten und manchmal eine verbesserte Kompilierungsgeschwindigkeit.
Bei einigen Nachforschungen stellte ich fest, dass die #pragma once
Direktive zwar von fast allen bekannten Compilern unterstützt wird, es jedoch eine Unklarheit darüber gibt, ob die #pragma once
Direktive Teil des C ++ 11-Standards ist oder nicht.
Fragen:
- Könnte jemand klären, ob die
#pragma once
Direktive Teil des C ++ 11-Standards ist oder nicht? - Wenn es nicht Teil des C ++ 11-Standards ist, gibt es Pläne, es in späteren Versionen (z. B. C ++ 14 oder höher) aufzunehmen?
- Es wäre auch schön, wenn jemand die Vor- und Nachteile bei der Verwendung einer der beiden Techniken (dh Makroschutz gegenüber
#pragma once
) weiter erläutern könnte .
#pragma once
normalerweise nicht.