Include Wrapping
-
Hallo!
Warum soll folgendes die Compilegeschwindigkeit erhöhen?
#ifndef myHeader_h__ #include "myHeader.h" #endifDanke schonmal!
Niels
-
Weil der Header kein zweites mal (unnötigerweise) included wird.. Allerdings muss myHeader_h__ auch gesetzt werden.
-
nielsp schrieb:
Hallo!
Warum soll folgendes die Compilegeschwindigkeit erhöhen?
#ifndef myHeader_h__ #include "myHeader.h" #endifSolch Code kenne ich nur noch aus alten Uhrzeiten. Includeguards (die tatsächlich u.a. die Compilegeschwindigkeit erhöhen) setzt man eigentlich in der betroffenen Datei und nicht um das Include herum. Ich sehe obiges eher als Unsitte an.
-
Ich sehe obiges eher als Unsitte an.
Hmm. Ich sehe das eigentlich nicht als direkten Headerguard an. Es kann ja durchaus auch Sinn machen, wenn im Header selbst bereits Gurads vorhanden sind. Der Präprozessor muss da die Datei gar nicht erst öffnen. Könnte somit ja eigentlich als Standardkonformes
pragma oncegelten. Ich weiss nicht, wie viel es wirklich ausmacht, aber ganz ohne Wirkung wird es nicht sein.
-
Also zumindest der gcc behandelt include guards in Headerdateien seit geraumer Zeit genauso wie pragma once. Das heißt er liest dann tatsächlich nur die ersten paar Zeilen, anstatt erst die ganze Datei zu Inkludieren und dann alles zu verwerfen.
-
SeppJ schrieb:
Also zumindest der gcc behandelt include guards in Headerdateien seit geraumer Zeit genauso wie pragma once. Das heißt er liest dann tatsächlich nur die ersten paar Zeilen, anstatt erst die ganze Datei zu Inkludieren und dann alles zu verwerfen.
pragma oncemacht aber unter Windows etwas klein wenig anderes:http://msdn.microsoft.com/en-us/library/4141z1cx.aspx
Er öffnet die Datei gar nicht erst erneut. Das macht ja auch was aus. Und mit einem solchen
#definevor dem includen in eine andere Datei simuliert man ja das auch. Die Frage ist nur, was teurer ist. Dasifndefoder das schnelle öffnen und schauen.
-
Ich hab's nochmal nachgelesen. Mittlerweile ist es sogar so, dass Dateien mit Include guards beim gcc gar nicht erst ein zweites Mal geöffnet werden, so wie beim MS Compiler das pragma once. Da das Feature schon eine Weile drin ist, und Microsoft auch keine schlechten Compiler schreibt, würde ich darauf wetten, dass deren Compiler das auch kann.
edit: Hier noch zum Selbstlesen: http://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html
-
Kann ich mir auch gut vorstellen, dass das auch bei MS so ist. Allerdings habe ich ja gesagt, dass ich das als Standardkonformes
pramga oncesehe. Ob es Heutzutage noch nötig ist, oder nicht sei dahingestellt.