2016-05-16 3 views
8

С here, говорится, что:Почему мы используем `#include 'stdafx.h" вместо `#include <stdafx.h>`?

Для #include «имя_файла» Обыски препроцессора в том же каталоге, что и файл, содержащий директиву. Этот метод является , обычно используемым для включения файлов заголовков, определенных программистом.

Для #include запрос препроцессора в реализации зависимый способ, обычно в каталогах поиска, предварительно назначенных компилятором/IDE . Этот метод обычно используется для включения стандартных файлов заголовков .

Хотя this wiki link предполагает, что stdafx.h является заголовочный файл, предварительно разработанный visual studio IDE

stdafx.h файл, генерируется Microsoft Visual Studio IDE волшебников, , который описывает как стандартные системы и конкретного проекта включают файлы , которые часто используются, но вряд ли когда-либо меняются.

Совместимые компиляторы (например, Visual C++ 6.0 и новее) будут прекомпилировать этот файл, чтобы сократить общее время компиляции. Visual C++ будет ничего не компилировать перед #include "stdafx.h" в файле , если параметр компиляции /Yu'stdafx.h 'не установлен (по по умолчанию); он принимает весь код в источнике до и в том числе, что строка уже скомпилирована.

AFX в stdafx.h - это приложения для приложений Framework eXtensions. AFX был оригинальной аббревиатурой для классов Microsoft Foundation (MFC). Хотя имя stdafx.h используется по умолчанию, проекты могут указать альтернативное имя.

Тогда

Почему мы используем #include "stdafx.h" вместо #include <stdafx.h>?

+0

Возможно **, где ** Visual Studio по умолчанию генерирует этот заголовок, может оказать некоторую помощь в ответе на ваш собственный вопрос. – WhozCraig

ответ

8

A stdafx.h, stdafx.cpp пара создана VS из шаблона. Он находится в том же каталоге, что и остальные файлы. Вероятно, вы в конечном итоге измените его для своего проекта. Поэтому мы используем "" вместо <> именно по той причине, что он находится в том же каталоге, что и ваша первая цитата.

+0

ОК, я вижу 'stdafx.obj',' stdafx.h', 'stdafx.cpp' в' ... \ testMEX \ testMEX \ Debug' и '... \ testMEX \ testMEX', где' testMEX' является имя моего проекта консольного приложения – sepideh

+0

, поэтому вы имеете в виду 1- файлы 'stdafx.h',' stdafx.cpp', 'handler_stdafx.h',' handler_stdafx.cpp' в разных подпапках '(.NET, ATL, Generic, MFC) '' C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ AppWiz' - файлы 'Stdafx.h',' StdAfx.h', 'Stdafx.cpp',' StdAfx. cpp'in в разных частях каталога 'C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensibility Projects' 3 - файлы' stdafx.h', 'stdafx.cpp' в разных подпапках' (include, lib, src) 'из' C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ atlmfc' каталога 4 - файлы 'stdafx.h', – sepideh

+0

' stdafx.cpp' в 'C: \ Program Файлы (x86) \ Microsoft Visual Studio 10.0 \ DIA SDK \ Samples \ DIA2Dump' в моей машине «Win7x64» - это все шаблоны. И когда мы начинаем новый проект в Visual Studio 2010, для него создается специальный файл 'stdafx.h', основанный на типе проектов и использовании этих шаблонов? – sepideh

4

Потому что stdafx.h отличается для каждого проекта. Как вы указали, #include "" ищет путь к текущему проекту, и именно здесь находится stdafx.h.

Использование #include <stdafx.h> будет огромный ошибка, потому что она должна была бы быть в пути к библиотеке (где все стандартные заголовки библиотеки расположены). Это означало бы, что вы не должны изменять его или что он всегда остается прежним, но для разных проектов он никогда не меняется.

Таким образом, хотя он создан Visual Studio, он специфичен для проекта, а не для всех проектов.

Смежные вопросы