Г л а в а 8
КОМАНДЫ ПРЕПРОЦЕССОРА
(ДИРЕКТИВЫ КОМПИЛЯЦИИ)
В интегрированную среду подготовки программ на С++ как обязательный компонент входит препроцессор, который обрабатывает исходный текст программы до её компиляции. Для этого используются его команды, которые ещё называются инструкции компилятору (компиляции), директивы компиляции, директивы (команды) препроцессора, с некоторыми из которых (#include, #define) мы уже кратко знакомы. Такие команды не являются частью языка. Напомним основные синтаксические правила записи команд препроцессора:
· в одной строке можно записать только одну директиву;
· каждая из них должна начинаться с символа #;
· в конце директивы в отличие от операторов символ “точка с запятой” не пишется.
§1. Директива define (замены в тексте)
Простое макроопределение (макрос)
Стандартный вид директивы следующий:
#define идентификатор последовательность_символов
В результате её обработки все вхождения определённого в команде идентификатора в тексте программы, начиная с этой команды, заменяются записанной последовательностью символов. Идентификатор называют ещё макроопределением или макросом.
Правила записи директивы define:
последовательность символов должна отделяться от идентификатора хотя бы одним пробелом;
пробелы, помещённые в начале и в конце строки замещения, в подстановке не используются;
если последовательность символов должна быть расположена на нескольких строках, то за последним не пробельным символом в строке записывается символ “\” (обратный слеш). В ходе препроцессорной обработки этот символ вместе с последующим символом конца строки будет удалён из текста программы ( см. пример3);
замена не производится в строковых и символьных константах и в комментариях;
строка замещения может отсутствовать (пример 2);
директива может размещаться в любом месте текста программы, не обязательно в её начале, как мы писали в простейшем случае раньше. Действие команды распространяется от точки размещения до конца текста программы;
ранее определённый идентификатор можно затем использовать для определения других идентификаторов (пример 6).