2.2. Макросы |
Вверх Предыдущий Следующий |
Синтаксис макросов поход на синтаксис идентификаторов или переменных. Разница в том, что макрос имеет значение, тогда как идентификатор может быть просто определён или не определён. Кроме того, после объявления макроса, любое появление макроса в исходном коде Pascal будет заменено значением этого макроса (подобно тому, как выполняется поддержка макросов в препроцессоре С ). Если требуется поддержка макросов, то должен быть использован переключатель командной строки -Sm (должен быть включен), или вместо него можно использовать директиву: {$MACRO ON} В противном случае макрос будет рассматриваться как идентификатор. Определение макроса в программе выполняется также, как определение идентификатора: в операторе препроцессора {$define}. Учтите, что в компиляторах версии до 0.9.8 оператор присваивания для макросов был не :=, а =. Если компилятор обнаружит ident в последующей части исходного кода, то он заменит его на expr. Эта замена работает рекурсивно, то есть если компилятор выполнит один макрос, он будет смотреть результат выражения и определять, не нужно ли выполнить ещё одну замену. Это означает, что нужно осторожно использовать макросы, так как может получиться бесконечный цикл. Здесь приводятся два примера, которые иллюстрируют работу макросов: {$define sum:=a:=a+b;} Предыдущий пример может быть выполнен не так: {$define sum:=a:=a+b;} На моей системе последний пример привёл к ошибке «кучи», вызвав завершение работы компилятора с ошибкой 203.
По умолчанию компилятор предоставляет три макроса, содержащих номер версии, номер выпуска («релиза») и номер «патча». Они перечислены в таблице 2.1. Таблица 2.1. Предопределённые макросы
Макрос FPC_FULLVERSION содержит номер версии, который всегда использует две цифры для номеров версий «релиза» и «патча». Это означает, что версия 2.3.1 в результате будет FPC_FULLVERSION=20301. Это число позволяет более просто определить минимальный номер версии.
|