Г л а в а 8

КОМАНДЫ ПРЕПРОЦЕССОРА

(ДИРЕКТИВЫ КОМПИЛЯЦИИ)

 

В интегрированную среду подготовки программ на С++ как обязательный компонент входит препроцессор, который обрабатывает исходный текст программы до её компиляции. Для этого используются его команды, которые ещё называются инструкции компилятору (компиляции), директивы компиляции, директивы (команды) препроцессора, с некоторыми из которых (#include, #define) мы уже кратко знакомы. Такие команды не являются частью языка. Напомним основные синтаксические правила записи команд препроцессора:

· в одной строке можно записать только одну директиву;

· каждая из них должна начинаться с символа #;

· в конце директивы в отличие от операторов символ “точка с запятой” не пишется.

 

 

§1. Директива define (замены в тексте)

 

Простое макроопределение (макрос)

 

Стандартный вид директивы следующий:

#define идентификатор последовательность_символов

В результате её обработки все вхождения определённого в команде идентификатора в тексте программы, начиная с этой команды, заменяются записанной последовательностью символов. Идентификатор называют ещё макроопределением или макросом.

Правила записи директивы define:

последовательность символов должна отделяться от идентификатора хотя бы одним пробелом;

пробелы, помещённые в начале и в конце строки замещения, в подстановке не используются;

если последовательность символов должна быть расположена на нескольких строках, то за последним не пробельным символом в строке записывается символ “\” (обратный слеш). В ходе препроцессорной обработки этот символ вместе с последующим символом конца строки будет удалён из текста программы ( см. пример3);

замена не производится в строковых и символьных константах и в комментариях;

строка замещения может отсутствовать (пример 2);

директива может размещаться в любом месте текста программы, не обязательно в её начале, как мы писали в простейшем случае раньше. Действие команды распространяется от точки размещения до конца текста программы;

ранее определённый идентификатор можно затем использовать для определения других идентификаторов (пример 6).