Gaist-Endruy
( off
)
(
09:33 24-03-2009
)
Иногда возникают потребности изменять порядок команд макрорасширения внутри макроса.
Рассмотрим следующую программу:
Gaist-Endruy
( off
)
(
09:33 24-03-2009
)
Пример 4:
.
.
.
ScrollScreenLeft(1);
LiteralChar('-');
.
.
.
ScrollScreenDown;
ScrollScreenLeft(2);
LiteralChar('*');
.
.
.
Gaist-Endruy
( off
)
(
09:33 24-03-2009
)
В этом примере не только параметры, но и количество команд - переменная величина. Эта программа может быть записана следующим образом:
Gaist-Endruy
( off
)
(
09:33 24-03-2009
)
.
.
.
MACRO Mac1(p1,left,chr)
IF p1==1 THEN
ScrollScreenDown;
ENDIF
ScrollScreenLeft(2);
LiteralChar('*');
END
.
.
.
Mac1(1,2,'-')
.
.
.
Mac1(0,1,'*')
.
.
.
Gaist-Endruy
( off
)
(
09:33 24-03-2009
)
.
.
.
ScrollScreenLeft(1);
LiteralChar('-');
.
.
.
ScrollScreenDown;
ScrollScreenLeft(2);
LiteralChar('*');
.
.
.
Gaist-Endruy
( off
)
(
09:34 24-03-2009
)
Комбинация IF...THEN...ELSE является макрометками или символами следования и не появляются в выходном тексте макропроцессора. В макроязыке также могут быть предусмотрены псевдокоманды условного и безусловного перехода на псевдо-метку, с которой макропроцессор продолжит обработку текста программы.
Gaist-Endruy
( off
)
(
09:34 24-03-2009
)
Точно так же, как и в случае выполнения программы, операторы переходов служат для указания выполнения операторов программы, операторы макро-переходов служат для указания порядка компиляции текста программы.
Gaist-Endruy
( off
)
(
09:34 24-03-2009
)
Это дает возможность в процессе расширения получать конкретные варианты последовательностей команд, соответствующие данному случаю применения макрокоманды. Выполнение переходов и проверок внутри выполняемого кода увеличивает его размер и время выполнения, в то время, как проверка и переходы в макросах происходят на стадии компиляции и поэтому не требуют затрат времени при выполнении кода.
Gaist-Endruy
( off
)
(
09:34 24-03-2009
)
Эта возможность избирательной выборки нужных частей текста является одним из самых мощных средств в системном программировании.
Gaist-Endruy
( off
)
(
09:34 24-03-2009
)
МАКРОВЫЗОВЫ ВНУТРИ МАКРООПРЕДЕЛЕНИЯ