Препроцессор C/C++ (англ. pre processor, предобработчик) — программа, подготавливающая код программы на языке C/C++ к компиляции.
Язык препроцессора C/C++ не является полным по Тьюрингу хотя бы потому, что с помощью директив невозможно заставить препроцессор зависнуть. См. рекурсивная функция (теория вычислимости).
Директивой (командной строкой) препроцессора называется строка в исходном коде, имеющая следующий формат: #ключевое_слово параметры
:
При обнаружении директив #include "..."
и #include <...>
, где «…» — имя файла, препроцессор читает содержимое указанного файла, выполняет директивы и замены (подстановки), заменяет директиву #include
на директиву #line
и обработанное содержимое файла.
Для #include "..."
поиск файла выполняется в текущей папке и папках, указанных в командной строке компилятора. Для #include <...>
поиск файла выполняется в папках, содержащих файлы стандартной библиотеки (пути к этим папкам зависят от реализации компилятора).
При обнаружении директивы #include последовательность-лексем
, не совпадающей ни с одной из предыдущих форм, рассматривает последовательность лексем как текст, который в результате всех макроподстановок должен дать #include <...>
или #include "..."
. Сгенерированная таким образом директива далее будет интерпретироваться в соответствии с полученной формой.