Си++/Препроцессорные директивы: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 36:
 
===Директива #include===
''#include "спецификация-пути"''
 
''#include <спецификация-пути>''
 
----
 
Директива '''#include''' добавляет содержимое заданного файла в другой файл. Можно организовать определения констант и макро в отдельном файле, а затем вставить его директивой #include в любой другой файл. Вставка файлов также очень удобна для объединения объявлений внешних переменных и сложных типов данных. Нужно определить и задать имена этих типов только один раз в созданный для этих целей файл.
 
Директива #include информирует предпроцессор о том, что содержание файла с заданным именем следует обрабатывать так, как будто оно присутствует в исходной программе в месте расположения этой директивы. Новый текст также может содержать директивы предпроцессора. Предпроцессор выполняет директивы в новом тексте, а затем продолжает обработку текста исходного файла.
 
"Спецификация пути" это имя файла, которому может предшествовать директория. Это должно быть имя существующего файла. Синтаксис спецификации файла зависит от операционной системы, в которой компилируется программа.
 
При поиске файлов предпроцессор использует концепцию "стандартной" директории. Расположение стандартных директорий для файлов зависит от реализации и операционной системы. Определение стандартной директории можно найти в Вашем Руководстве по компилятору.
 
Предпроцессор останавливает поиск сразу же после обнаружения файла с заданным именем. Если задать полную спецификацию файла, заключенную в двойные цитатные скобки (" "), то предпроцессор использует ее для поиска и игнорирует стандартную директорию.
 
Если заключенная в двойные цитатные скобки спецификация файла является неполной, то предпроцессор сначала ищет директорию "родительского" файла. Родительский файл это файл, содержащий директиву #include. Например, если файл f2 вставляется в файл f1, то f1 будет родительским файлом.
 
Вставка файлов может быть вложенной. Т.е. директива #include может появляться в файле, который сам вставляется директивой #include. Например, в приведенном выше примере файл f2 может вызывать файл f3. В этом случае f1 все еще будет родительским для f2, но "дедушкой" для f3.
 
При вложенной вставке файлов поиск директории начинается с родительского файла, затем проходит по дедушкиным файлам. Следовательно, поиск начинается в директории, которая содержит обрабатываемый исходный файл. Если файл не найден, то поиск продолжается в директориях, заданных в командной строке компилятора. И, наконец, производится поиск в стандартной директории.
 
Если спецификация файла заключена в угловые скобки, то предпроцессор не проводит поиска в текущем рабочем каталоге. Поиск файла начинается в директориях, заданный в командной строке компилятора, а затем в стандартной директории.
 
Допускается вложение вставки файлов до 10 уровней. При обработке вложенных #include предпроцессор всегда будет осуществлять вставку в первоначальный исходный файл.
 
===Директива #undef===