lec18
.pdfСтадия обработки директив препроцессора.
При ее обработке возможны следующие действия:
Iзамена идентификаторов (обозначений) заранее подготовленными последовательностями символов;
Iвключение в программу текстов из указанных файлов;
Iисключение из программы отдельных частей ее текста (условная компиляция);
Стадия обработки директив препроцессора.
При ее обработке возможны следующие действия:
Iзамена идентификаторов (обозначений) заранее подготовленными последовательностями символов;
Iвключение в программу текстов из указанных файлов;
Iисключение из программы отдельных частей ее текста (условная компиляция);
Iмакроподстановка, т.е. замена обозначения параметризированным текстом, формируемым препроцессором с учетом конкретных параметров (аргументов).
Директивы препроцессора.
Для управления препроцессором используются команды (директивы) препроцессора, каждая из которых помещается на отдельной строке и начинается с символа ].
Обобщенный формат директивы препроцессора:
Определены следующие директивы препроцессора:
Директивы препроцессора.
Препроцессорные операции.
Кроме директив препроцессора существуют три препроцессорные операции:
Замены в тексте.
Для замены выбранного идентификатора заранее подготовленной последовательностью символов используется директива ]define:
Директива может размещаться в любом месте обрабатываемого текста, а ее действие в обычном случае распространяется от точки размещения до конца текста.
Замены в тексте. Пример.
Цепочка подстановок.
Если в строке замещения команды ]define в качестве отдельной лексемы встречается препроцессорный идентификатор ранее определенный другой директивой ]define, то выполняется цепочка последовательных подстановок. Пример. Рассмотрим как можно определить диапазон (RANGE) возможных значений любой целой переменной типа int в следующей программе:
Цепочка подстановок.
Препроцессор вставляет текст из файла limits.h, в котором определены константы INT_MAX и INT_MIN. Программа примет вид:
Цепочка подстановок.
Обнаружив в тексте директивы ]define (добавленные из файла limits.h), препроцессор делает подстановку, программа примет вид: