Препроцессор — это компьютерная программа, принимающая данные на входе и выдающая данные, предназначенные для входа другой программы (например, компилятора). О данных на выходе препроцессора говорят, что они находятся в препроцессированной форме, пригодной для обработки последующими программами (компилятор). Результат и вид обработки зависят от вида препроцессора; так, некоторые препроцессоры могут только выполнить простую текстовую подстановку, другие способны по возможностям сравниться с языками программирования. Наиболее частый случай использования препроцессора — обработка исходного кода перед передачей его на следующий шаг компиляции. Языки программирования C/C++ и система компьютерной вёрстки TeX используют препроцессоры, значительно расширяющие их возможности.
1.6.1. Препроцессор языка С++
Препроцессор С/С++ — программный инструмент, изменяющий код программы для последующей компиляции и сборки, используемый в языках программирования Си и его потомка - C++. Этот препроцессор обеспечивает использование стандартного набора возможностей:
Важной областью применения препроцессоров С является условная компиляция. При подготовке программы к компиляции разработчик может с помощью нескольких изменений адаптировать программу к текущей ситуации (например, к определенной модели процессора).
Препроцессор языка Си — низкоуровневый, лексический препроцессор, потому что он требует только лексического анализа, то есть он обрабатывает только исходный текст перед парсингом, выполняя
Директивой препроцессора (или командной строкой препроцессора) называется строка в исходном коде, которая начинается с символа # и следующего за ним ключевого слова препроцессора. Есть чётко определённый список ключевых слов:
define — задаёт макроопределение (макрос) или символическую константу
undef — отменяет предыдущее определение
include — вставляет текст из указанного файла
if — осуществляет условную компиляцию при истинности константного выражения
ifdef — осуществляет условную компиляцию при определённости символической константы
ifndef — осуществляет условную компиляцию при неопределённости символической константы
else — ветка условной компиляции при ложности выражения
endif — конец ветки условной компиляции
line — препроцессор изменяет номер текущей строки и имя компилируемого файла
error — выдача диагностического сообщения
pragma — действие, зависящее от конкретной реализации компилятора