webentwicklung-frage-antwort-db.com.de

stdafx.h: Wann brauche ich das?

Ich sehe so viel Code, einschließlich stdafx.h. Angenommen, ich möchte nicht vorkompilierte Header. Und ich werde alle erforderlichen System-Header selbst manuell einfügen. Gibt es in diesem Fall einen anderen guten Grund, warum ich wissen sollte, wo ich stdafx.h benötige?

30
Ashwin Nanjappa

Wenn Sie keine vorkompilierten Header verwenden möchten, ist es nicht sinnvoll, eine Standard-Include-Datei zu verwenden. Dadurch wird der Build für jede Datei, die sie enthält, verlangsamt, und sie müssen zusätzliche Elemente hinzufügen, die sie nicht benötigen. Beseitigen Sie es und fügen Sie einfach die Header ein, die sie benötigen.

17

Auch ohne vorkompilierte Header könnte stdafx.h nützlich sein, da es Header-Include und Definitionen für alle Dateien gruppiert.

Sie können natürlich alle diese Definitionen in jeder Datei wiederholen. stdafx.h ist nicht unbedingt erforderlich.

2
kgiannakakis

stdafx.h ist nur eine weitere Headerdatei. Wenn Sie fallen, brauchen Sie es nicht. Nehmen Sie es nicht auf und entfernen Sie es aus dem Projekt.

Es ist jedoch ziemlich typisch, eine Datei wie stdafx.h zu haben, damit vorkompilierte Header funktionieren und nicht alles manuell in jede Quelldatei eingefügt wird.

2
sharptooth

Sie können vorkompilierte Header verwenden (was eine gute Sache ist), ohne stdafx.h zu verwenden (ich verabscheue es auch). Ich habe nur Zugriff auf VC++ 6.0, aber in diesem Bereich gehen Sie zu Projekteinstellungen | C/C++ | Vorkompilierte Header und wählen Sie "Automatische Verwendung des vorkompilierten Headers" aus.

2
anon

Wie andere bereits erwähnt haben: Wenn Sie keine vorkompilierten Header benötigen, benötigen Sie nicht wirklich stdafx.h. Und es zu benutzen, nur um gemeinsame Inhalte zu gruppieren, ist eigentlich eine ziemlich schlechte Praxis.

Selbst wenn Sie vorkompilierte Header verwenden, empfiehlt es sich, die Header anzugeben, die Ihr Prozess nach stdafx.h (oder precompiled.h oder wie auch immer Sie es nennen möchten) tatsächlich enthält - zusammen mit #ifdef magic in Ihrem vorkompilierten Header die Verwendung von PCH.

Warum? Um Ihre Modulabhängigkeiten zu überprüfen. Wenn Sie Ihren PCH deaktivieren können, können Sie feststellen, ob Sie die erforderlichen Module hinzufügen oder nicht. Sie können dann ein Tool schreiben, um die Abhängigkeiten des Moduls zu überprüfen, indem Sie Ihre .cpp- und .h-Dateien (natürlich ohne den PCH-Header) analysieren.

1
snemarch

Ich weiß, dass dies ein alter Thread ist, aber ich dachte, ich würde meine Meinung an die Leser weitergeben. Ich habe dies 2017 gefunden, daher bin ich mir sicher, dass ich nicht der einzige bin, der hier sein wird. 

Die Verwendung vorkompilierter Header ist von Vorteil, da andere sie möglicherweise übersehen, da sie ihre Praxis seit vielen Jahren anwenden. Der C++ - Standard hat sich stark weiterentwickelt. Anstatt Vector in 20 Dateien einzubinden, die Sie möglicherweise benötigen und und oder was auch immer, verwenden Sie eine PCH-Datei, und der Compiler muss weniger Arbeit leisten, und das macht fröhliche Gesichter für alle. Sie können auch Ihre üblichen Makros wie VERIFY, ASSERT und Smart-Klassenobjekte einfügen. Fügen Sie Ihre Klassenüberschriften nicht dort ein, es wäre nicht sinnvoll, eher die Standardbibliothek oder etwas, das Sie global an vielen Stellen verwenden müssen, wie z. B. bei den von mir genannten Makros. 

im Grunde ist dies klar: Wenn Sie die benötigten Kopfzeilen in jede Datei einfügen, z. B. Iostream, Zeichenfolge und Vektor, kompilieren Sie dies effektiv als Inline-Datei für die Datei. Fügen Sie einen "Pre Compiled" -Header hinzu. Nun, nur der Name sollte dort klingeln. 

0
Gary Stewart