Gaist-Endruy
( off
)
(
09:29 24-03-2009
)
Такой процесс замены называется расширением макрокоманды. Заметим, что само макроопределение не появляется в расширении исходного текста. Определение сохраняется макропроцессором. Вхождение в исходную программу имени макрокоманды как мнемоники операции называется макровызовом.
Gaist-Endruy
( off
)
(
09:29 24-03-2009
)
ОПЕРАТОРЫ МАКРОКОМАНД
Gaist-Endruy
( off
)
(
09:29 24-03-2009
)
Аппарат макрокоманд в том виде, как он был описан до сих пор, позволяет подставлять последовательности команд вместо макровызовов, причем все обращения к макроопределению будут заменены идентичными последовательностями команд.
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
Такой аппарат недостаточно гибок: в макровызове нет средств модифицировать коды, которые его заменяют. Существенное расширение возможностей макросредств достигается добавлением операндов (параметров) макрокоманд.
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
Рассмотрим следующую программу:
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
Пример 2:
.
.
.
SetPrevPos;
MoveToMark(1);
CenterFixScreenPos;
.
.
.
SetPrevPos;
MoveToMark(2);
CenterFixScreenPos;
.
.
.
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
В данном случае последовательности команд очень похожи, но не абсолютно идентичны. В первой последовательности используется операнд "1", а во втором - операнд "2". Можно считать, что они выполняют одну и ту же операцию с переменным параметром, или операндом. Такой параметр называют "операндом макрокоманды" или "формальным параметром", и он обычно объявляется в той же строке, где и имя макроса.
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
В случае работы с языком макроассемблера, он обычно помечается символом &, что отличает его как символ макроязыка от символов ассемблера. В нашем случае, фирма Борланд не предусмотрела в своем макроязыке работы с макрооперандами, однако можно предположить, что если бы макроопределения в языке TEMC могли бы обрабатывать подобную ситуацию, то формат макроопределения мог бы выглядеть следующим образом:
Gaist-Endruy
( off
)
(
09:30 24-03-2009
)
MACRO <macro name>(<paramlist>)
-----------------
-----------------
-----------------
END;
Gaist-Endruy
( off
)
(
09:31 24-03-2009
)
где <paramlist> это перечисление через запятую всех операндов макроса.
Предыдущая программа в таком случае может быть переписана следующим образом: