4. Директивы препроцессора
Препроцессор — это часть компилятора языка TOIC. Он предназначен для предварительной обработки текста программы. Препроцессор позволяет включать в текст программы дополнительные файлы и вводить макроопределения. Работа препроцессора осуществляется с помощью специальных директив. Они начинаются со знака решетка #.
Основные директивы препроцессора:
- #include — вставляет текст из указанного файла
- #define — задаёт макроопределение (макрос) или символическую константу
- #undef — отменяет предыдущее определение
- #if — осуществляет условную компиляцию при истинности константного выражения
- #ifdef — осуществляет условную компиляцию при определённости символической константы
- #ifndef — осуществляет условную компиляцию при неопределённости символической константы
- #else — ветка условной компиляции при ложности выражения
- #elif — ветка условной компиляции, образуемая слиянием else и if
- #endif — конец ветки условной компиляции
Директива #include
Директива #include позволяет включать в текст программы указанный файл. Файл должен находиться в текущем каталоге проекта, либо в одной из папок для поиска, указанных компилятору.
Пример
#include "mylib.tos"
Директива #define Директива #define позволяет вводить в текст программы константы.
Общая форма записи
#define Идентификатор Замена
Поля Идентификатор и Замена разделяются одним или несколькими пробелами. Директива #define указывает компилятору, что нужно подставить строку, определенную аргументом Замена, вместо каждого аргумента Идентификатор в исходном файле. Идентификатор не заменяется, если он находится в комментарии, в строке или как часть более длинного идентификатора. Ограничения: Заменой может быть только число, имя переменной или литерал. Идентификаторы нельзя объединять.
Пример
#define MAX 3
Условная компиляция
Директивы #if или #ifdef / #ifndef вместе с директивами #elif, #else и #endif управляют компиляцией частей исходного файла. Если указанное выражение после #if имеет ненулевое значение, в записи преобразования сохраняется группа строк, следующая сразу за директивой #if. Синтаксис условной директивы следующий:
#if константное выражение
группа операций
#elif константное выражение
группа операций
#else
группа операций
#endif
У каждой директивы #if в исходном файле должна быть соответствующая закрывающая директива #endif. Между директивами #if и #endif может располагаться любое количество директив #elif, однако допускается не более одной директивы #else. Директива #else, если присутствует, должна быть последней перед директивой #endif.