2009-08-24 5 views
5

Wenn ich eine Kopfzeile (ah) in stdafx.h setzen und diese Kopfzeile eine andere Kopfzeile (Bh) enthält, die in stdafx.h nicht erwähnt wird, wird bh jedes Mal besucht, wenn jemand ah oder enthält Ist es als Teil von ah zusammengestellt? Wenn es in a.h kompiliert wird, was passiert, wenn jemand b.h direkt hinzufügt? Wird dies vorkompiliert oder nicht?Frage zu vorkompilierten Headern in Visual C++

Meine Motivation für diese Frage ist, dass ich versuche, den Inhalt der stdafx.h-Dateien für die Software zu optimieren, an der ich arbeite. Sowohl die Neuerstellung als auch die inkrementelle Erstellung sind für uns wichtig. Ich habe mich gefragt, ob ich einfach alle .cpp-Dateien nach #include-Anweisungen durchsuchen und die Anzahl der einzelnen Dateien zählen könnte. Dateien, die oft enthalten sind, könnten gute Kandidaten für die Datei stdafx.h sein. Natürlich ist diese Strategie völlig falsch, wenn ich nicht nur berücksichtigen muss, welche Dateien enthalten sind, sondern auch welche Dateien die enthaltenen Dateien enthalten.

Ich bezweifle es darauf ankommt, aber wir sind mit Visual Studio 2005.

+0

BITTE WÄHLEN SIE FÜR DIESE: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-hared-between-pro –

Antwort

4

A. h und b.h wird Teil des vorkompilierte Header sein, und es gibt keine Notwendigkeit, sie später zu schließen. Alles, was Sie brauchen, ist stdafx.h, wo a.h oder b.h erforderlich sind. Wenn Sie ah oder bh explizit nach stdafx.h einschließen (der gesamte Code vor stdafx.h include wird ignoriert), wird es nicht zum zweiten Mal kompiliert (nur weil sie normalerweise durch #pragma once Direktive oder Defines geschützt sind), aber Compiler wird diese Datei auf der Festplatte öffnen, wenn Sie danach fragen,

Übrigens sollten Sie wissen, dass Sie mehrere vorkompilierte Header-Dateien verwenden können (aber nicht mehr als eins in jeder cpp-Datei).

+3

Was Sie sagen über einschließlich ah oder bh nach stdafx.h ist technisch wahr - der Compiler wird wieder auf die Header schauen - aber die meisten Header verwenden einmal # Pragma oder enthalten Wachen, um dies zu verhindern. In der Tat würde ich empfehlen, a.h und b.h überall dort einzubinden, wo sie benötigt werden, auch wenn a.h in stdafx.h ist - sonst können Sie den Inhalt von stdafx.h später nicht verändern, ohne in eine endlose Liste von Kompilierungsfehlern zu geraten. –

+0

Ja, sie werden nicht kompiliert, aber sie werden vom Compiler technisch geöffnet. –

+1

Ich stimme zu, Nicks Idee ist hilfreich, aber ich habe nur Angst, dass es eine Leistungseinbusse geben würde, da wir zusätzliche Festplatten-IO benötigen, um herauszufinden, dass es einmal ein #progma gibt –

Verwandte Themen