Комбинация IF...THEN...ELSE является макрометками или символами следования и не появляются в выходном тексте макропроцессора. В макроязыке также могут быть предусмотрены псевдокоманды условного и безусловного перехода на псевдо-метку, с которой макропроцессор продолжит обработку текста программы. Точно так же, как и в случае выполнения программы, операторы переходов служат для указания выполнения операторов программы, операторы макро-переходов служат для указания порядка компиляции текста программы. Это дает возможность в процессе расширения получать конкретные варианты последовательностей команд, соответствующие данному случаю применения макрокоманды. Выполнение переходов и проверок внутри выполняемого кода увеличивает его размер и время выполнения, в то время, как проверка и переходы в макросах происходят на стадии компиляции и поэтому не требуют затрат времени при выполнении кода. Эта возможность избирательной выборки нужных частей текста является одним из самых мощных средств в системном программировании.
МАКРОВЫЗОВЫ ВНУТРИ МАКРООПРЕДЕЛЕНИЯ
Поскольку макроопределения являются, по сути, “сокращениями” для последовательности команд, то полезным свойством была бы возможность производить такие “сокращения” внутри самих макроопределений.
Пример 5:
.
.
.
MACRO Mac1
SetPrevPos;
CursorCharRight;
END
.
.
.
MACRO Mac2
Mac1
Mac1
END
.
.
.
Внутри макроопределения Mac2 дважды происходит ссылка на макроопределение Mac1. Это помогло нам уменьшить длину макроопределения Mac2 и сделало его более легким для понимания. Такое использование макросредств приводит к макрорасширениям на нескольких уровнях вложенности, например: