2009-07-29 9 views
0

Mit Blick auf Open-Source-Code-Basis kam ich auf diesen Code:Kleine Frage zu vorkompilierte Header

#include "StableHeaders.h" 
#include "polygon.h" 
#include "exception.h" 
#include "vector.h" 
... 

Nun ist die StableHeaders.h ist eine vorkompilierte Header, die durch eine ‚Kontrolle‘ cpp enthalten ist zu zwingen, es Generation ist . Die drei Includes, die nach dem vorkompilierten Header angezeigt werden, sind in der StableHeaders.h-Datei enthalten. Meine Frage ist, sind diese Dateien zweimal enthalten, so dass die Codebasis auf Compilern aufbauen wird, die nicht vorkompilierte Header unterstützen? Wie im vorausgesetzt, die Wachen/Header-Caching umfassen macht die mehrfach redundante ohnehin beinhaltet ...

EDIT btw, hat die stableheaders.h Datei einen Scheck für win32 (ungefähr) so wieder unter der Annahme, im, dass die Inneren stableheaders enthält .h wird nicht in Compilern enthalten sein, die nicht vorkompilierte Header unterstützen.

Antwort

2

Compiler, die keine vorkompilierten Header unterstützen, enthalten nur StableHeaders.h und analysieren sie jedes Mal (anstatt die vorkompilierte Datei zu verwenden). Es wird keine Probleme verursachen und auch keine Probleme für bestimmte Compiler beheben. Ich denke, es ist nur ein kleiner "Fehler", der wahrscheinlich im Laufe der Zeit während der Entwicklung passiert ist.

+0

Ok guter Rat, krank halten Sie die Frage offen, um andere Kommentare zu sehen, danke –

+0

Und ich nehme an, #pragma hdrstop wird von Compilern ignoriert werden, die es nicht unterstützen? –

+1

#pragma ist eine Nicht-Standard-Funktion. Die Standardpraxis besteht darin, den Header bedingt unter Verwendung von "#ifndef HEADER dann #define HEADER" –

0

Ich denke, Sie selbst haben die Frage beantwortet! Vorkompilierte Header sind eine Compiler-Funktion. Wenn der Wächter vorhanden ist, werden die Header in jedem Fall nicht zweimal enthalten sein.

0

Der einzige Grund, warum ich den vorkompilierten Header schützen und das Zeug trotzdem einbinden kann, ist die Geschwindigkeit. Der Grund für die Verwendung von vorkompilierten Headern besteht darin, die Kompilierzeiten zu verkürzen, indem der Inhalt des vorkompilierten Headers einbezogen und kompiliert wird. Wenn Sie dies tun, können Sie Header einfügen, die nur von 75% der Quelldateien verwendet werden schneller als keine vorkompilierten Header.

Wenn jedoch die anderen Plattformen abwärts vorkompilierte Header unterstützen, möchten Sie nur die Headerdateien einschließen, die für diese Quelldatei erforderlich sind. Wenn also der vorkompilierte Header Include-Dateien enthält, die nur von einigen Quelldateien benötigt werden, ist es einfacher, die benötigten Header-Dateien einfach einzubinden und zu kompilieren.

Verwandte Themen