Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Указывает препроцессору включить содержимое указанного файла в точку, в которой появится директива.
Синтаксис
#include "path-spec"
#include <path-spec>
Замечания
Вы можете упорядочить определения констант и макросов включаемые файлы (также известные как файлы заголовков), а затем использовать #include директивы для их добавления в любой исходный файл. Включаемые файлы также позволяют внедрять объявления внешних переменных и сложных типов данных. Типы можно определять и именовать только один раз во включаемом файле, созданном с этой целью.
Спецификация пути — это имя файла, которое может предшествовать спецификации каталога. Имя файла должно указывать на существующий файл. Синтаксис спецификации пути зависит от операционной системы, в которой компилируется программа.
Сведения о том, как ссылаться на сборки в приложении C++, скомпилированном с помощью /clrдирективы, см #using . в директиве.
Обе формы синтаксиса приводят #include к замене директивы всем содержимым указанного файла. Разница между двумя формами — это порядок путей, которые выполняет препроцессор при неполном указании пути. В приведенной ниже таблице показывается различие между этими формами синтаксиса.
| Форма синтаксиса | Действие |
|---|---|
| Форма в кавычках | Препроцессор ищет включаемые файлы в следующем порядке: 1) В том же каталоге, что и файл, содержащий инструкцию #include .2) В каталоги открытых в настоящее время файлов включают файлы в обратном порядке, в котором они были открыты. Поиск начинается в каталоге родительского включаемого файла, а затем выполняется в каталогах всех включаемых файлов-прародителей. 3) Вдоль пути, заданного каждым /I параметром компилятора.4) Вдоль путей, указанных переменной INCLUDE среды. |
| Форма с угловыми скобками | Препроцессор ищет включаемые файлы в следующем порядке: 1) Вдоль пути, заданного каждым /I параметром компилятора.2) При компиляции в командной строке вдоль путей, указанных переменной INCLUDE среды. |
Как только препроцессор найдет файл с заданным именем, поиск останавливается. Если вы заключаете полную, однозначное описание пути включения файла между двойными кавычками (" "), препроцессор выполняет поиск только по этой спецификации пути и игнорирует стандартные каталоги.
Если имя файла, заключенное в двойные кавычки, является неполной спецификацией пути, препроцессор сначала выполняет поиск в каталоге родительского файла. Родительский файл — это файл, содержащий директиву #include . Например, если в файл с именем file1 включен файл с именем file2, файл1 является родительским файлом.
Включить файлы можно вложить: #include директива может отображаться в файле, именованном другой #include директивой. Например, file2 может включать файл3. В этом случае файл1 по-прежнему будет родительским элементом file2, но это будет бабушка и дедушка файла3.
При добавлении файлов вложены и при компиляции в командной строке поиск каталога начинается в каталоге родительского файла. Затем он проходит через каталоги любых бабушки и дедушки файлов. Таким образом, поиск начинается относительно каталога, в котором находится исходный файл, обрабатываемый в текущий момент. Если файл не найден, поиск перемещается в каталоги, указанные параметром /I компилятора (дополнительные каталоги включения). Наконец, выполняется поиск каталогов, указанных переменной INCLUDE среды.
В среде INCLUDE разработки Visual Studio переменная среды игнорируется. Вместо этого используются значения, указанные в свойствах проекта для каталогов include. Дополнительные сведения о настройке каталогов включения в Visual Studio см. в разделе "Включить каталоги" и "Дополнительные каталоги включения".
В приведенном ниже примере демонстрируется включение файлов с помощью угловых скобок:
#include <stdio.h>
В примере добавляется содержимое файла с именем stdio.h исходной программы. Угловые скобки приводят к тому, что препроцессор выполняет поиск каталогов, указанных INCLUDE переменной среды, stdio.hпосле поиска каталогов, указанных параметром компилятора /I .
В следующем примере демонстрируется включение файлов, заданных в кавычках:
#include "defs.h"
В примере добавляется содержимое файла, указанного defs.h в исходной программе. Кавычки означают, что препроцессор сначала попытается найти этот файл в каталоге, содержащем родительский исходный файл.
Для включаемых файлов поддерживается до 10 уровней вложения. После завершения обработки вложенного #include препроцессора продолжает вставлять вложенный родительский файл в исходный файл.
Только для систем Майкрософт
Чтобы найти исходные файлы для включения, препроцессор сначала выполняет поиск каталогов, указанных параметром компилятора /I . /I Если параметр отсутствует или не удается, препроцессор использует INCLUDE переменную среды для поиска файлов в угловых скобках. Переменная INCLUDE среды и /I параметр компилятора могут содержать несколько путей, разделенных точкой с запятой (;). Если несколько каталогов отображаются как часть /I параметра или в INCLUDE переменной среды, препроцессор выполняет поиск по порядку, в котором они отображаются.
Представим себе следующую команду:
CL /ID:\msvc\include myprog.c
вызывает препроцессор поиска каталога D:\msvc\include\ для включения файлов, таких как stdio.h. Ниже еще один пример:
SET INCLUDE=D:\msvc\include
CL myprog.c
Эта инструкция действуют точно так же. Если найти файл в обоих наборах каталогов не удастся, возникает неустранимая ошибка компилятора.
Если имя файла полностью указано для файла include, имеющего путь, содержащий двоеточие (например, F:\MSVC\SPECIAL\INCL\TEST.H), препроцессор следует пути.
Для включения файлов, указанных как #include "path-spec", поиск каталогов начинается в каталоге родительского файла, а затем проходит через каталоги любых файлов бабушки и дедушки. То есть поиск начинается относительно каталога, содержащего исходный файл, который обрабатывается. Если нет файла бабушки и дедушки, и файл по-прежнему не найден, поиск продолжается, как если бы имя файла было заключено в угловые скобки.
КОНЕЦ Только для систем Майкрософт
См. также
Директивы препроцессора
/I (Дополнительные каталоги включения)