2016-05-16 16 views
8

Von here, es wird gesagt, dass:Warum verwenden wir `#include" stdafx.h "` anstelle von `#include <stdafx.h>`?

Für #include „Dateiname“ die Präprozessor sucht in der gleichen Verzeichnis wie die Datei, die Richtlinie enthält. Diese Methode wird normalerweise verwendet, um Programmierer-definierte Header-Dateien einzuschließen.

Für # enthalten die Präprozessorsuchen in einer Implementierung abhängige Art und Weise, normalerweise in Suchverzeichnissen, die zuvor durch den Compiler/IDE gekennzeichnet wurden. Diese Methode wird normalerweise verwendet, um die Standardbibliothek Header-Dateien aufzunehmen.

Während this wiki link legt nahe, dass stdafx.h ist eine Header-Datei im Voraus entworfen von visual studio IDE

stdafx.h ist eine Datei, die durch Microsoft Visual Studio IDE-Assistenten, , die spezifische sowohl Standardsystem und Projekt beschreibt Include-Dateien , die häufig verwendet werden, aber kaum jemals ändern.

Kompatible Compiler (z. B. Visual C++ 6.0 und neuer) werden diese Datei vorkompilieren, um die Gesamtkompilierungszeiten zu reduzieren. Visual C++ wird nichts vor dem #include "stdafx.h" in der Quelle Datei kompilieren, es sei denn, die Kompilieroption/Yu'stdafx.h 'ist deaktiviert (von Standard); es nimmt an, dass der gesamte Code in der Quelle bis einschließlich Zeile bereits kompiliert ist.

Der AFX in stdafx.h steht für Application Framework eXtensions. AFX war die ursprüngliche Abkürzung für die Microsoft Foundation Classes (MFC). Während der Name standardmäßig stdafx.h verwendet wird, können Projekte einen alternativen Namen angeben.

Dann

Warum verwenden wir #include "stdafx.h" statt #include <stdafx.h>?

+0

Vielleicht ** where ** Visual Studio Standard-generiert diese Kopfzeile möglicherweise eine Hilfe bei der Beantwortung Ihrer eigenen Frage. – WhozCraig

Antwort

8

Ein stdafx.h, Paar wird von VS aus einer Vorlage generiert. Es befindet sich in demselben Verzeichnis, in dem der Rest der Dateien endet. Sie werden es wahrscheinlich am Ende für Ihr Projekt ändern. So verwenden wir "" anstelle von <> für genau den Grund, dass es im selben Verzeichnis wie Ihr erstes Zitat beschreibt.

+0

OK, ich sehe 'stdafx.obj',' stdafx.h', 'stdafx.cpp' im' ... \ testMEX \ testMEX \ Debug' und '... \ testMEX \ testMEX' wo' testMEX' steht Der Name meines Konsolenanwendungsprojekts – sepideh

+0

bedeutet also 1- die Dateien 'stdafx.h',' stdafx.cpp', 'handler_stdafx.h',' handler_stdafx.cpp' in verschiedenen Unterordnern '(.NET, ATL, Generic, MFC) 'von' C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ AppWiz' 2- die Dateien 'Stdafx.h',' StdAfx.h', 'Stdafx.cpp',' StdAfx. cpp'in verschiedenen Teilen des Verzeichnisses 'C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensibility Projects' 3- die Dateien' stdafx.h', 'stdafx.cpp' in verschiedenen Unterordnern' (include, lib, src) 'von' C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ atlmfc' -Verzeichnis 4- die Dateien 'stdafx.h', – sepideh

+0

' stdafx.cpp' in 'C: \ Program Dateien (x86) \ Microsoft Visual Studio 10.0 \ DIA SDK \ Samples \ DIA2Dump'-Verzeichnis auf meinem 'Win7x64'-Rechner sind alle Vorlagen. Und wenn wir in 'Visual Studio 2010' ein neues Projekt starten, wird dafür eine spezielle' stdafx.h' Datei erstellt, basierend auf dem Typ der Projekte und mit diesen Vorlagen? – sepideh

4

Da stdafx.h für jedes Projekt unterschiedlich ist. Wie Sie angegeben haben, sucht #include "" den Pfad des aktuellen Projekts, und hier befindet sich stdafx.h befindet.

#include <stdafx.h> wäre ein großen Fehler sein, weil es in der Bibliothek Pfad sein müßte (wo alle Standard-Bibliothek-Header befinden). Dies würde bedeuten, dass Sie es nicht ändern sollten oder dass es immer gleich bleibt, aber es ist nie das gleiche für verschiedene Projekte.

Also obwohl es von Visual Studio generiert wird, ist es spezifisch für das Projekt, nicht für alle Projekte.

Verwandte Themen