От Вот, он сказал, что:
За
#include "filename"
препроцессор ищет в том же
каталог как файл, содержащий директиву. Этот метод
обычно используется для включения определяемых программистом заголовочных файлов.За
#include <filename>
препроцессор ищет в реализации
зависимым образом, обычно в поисковых каталогах, предварительно обозначенных
компилятор / IDE. Этот метод обычно используется для включения стандартной библиотеки
заголовочные файлы.
В то время как эта ссылка вики предполагает, что 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 расшифровывается как Application Framework. AFX
была оригинальная аббревиатура для Microsoft Foundation Classes
(МФЦ). Хотя имя stdafx.h используется по умолчанию, проекты могут
укажите альтернативное имя.
затем
Почему мы используем #include "stdafx.h"
вместо #include <stdafx.h>
?
stdafx.h
, stdafx.cpp
пара генерируется VS из шаблона. Он находится в том же каталоге, что и остальные файлы. Вы, вероятно, в конечном итоге измените его специально для вашего проекта. Итак, мы используем ""
вместо <>
именно по той причине, что он находится в той же директории, что и ваша первая цитата.
Так как stdafx.h
отличается для каждого проекта. Как вы цитировали, #include ""
ищет путь к текущему проекту, и это где stdafx.h
расположен.
С помощью #include <stdafx.h>
будет огромный ошибка, потому что она должна быть в пути к библиотеке (где расположены все стандартные заголовки библиотеки). Это будет означать, что вы не должны изменять его или что оно всегда остается одним и тем же, но оно никогда не бывает одинаковым для разных проектов.
Таким образом, хотя он генерируется Visual Studio, он специфичен для проекта, а не для всех проектов.
В общем, для данного включаемого файла name.h, синтаксис #include <name>
зарезервировано для стандартные библиотеки, в то время как #include "name.h"
используется для пользовательских файлов. Там «пользователь» может означать любого разработчика, реализующего нестандартные функции, скажем для определенного пакета компилятора.
Соответственно, препроцессор ищет включаемые файлы по подходящим путям, указанным в системных настройках. Обратите внимание не только на разницу в скобках и кавычках, но также на различное использование расширения * .h.