Gaist-Endruy
( off
)
* (
09:35 24-03-2009
)
Поскольку макроопределения являются, по сути, "сокращениями" для последовательности команд, то полезным свойством была бы возможность производить такие "сокращения" внутри самих макроопределений.
[цит] Gaist-Endruy
( off
)
* (
09:35 24-03-2009
)
Пример 5:
.
.
.
MACRO Mac1
SetPrevPos;
CursorCharRight;
END
.
.
.
MACRO Mac2
Mac1
Mac1
END
.
.
.
[цит] Gaist-Endruy
( off
)
* (
09:35 24-03-2009
)
Внутри макроопределения Mac2 дважды происходит ссылка на макроопределение Mac1. Это помогло нам уменьшить длину макроопределения Mac2 и сделало его более легким для понимания. Такое использование макросредств приводит к макрорасширениям на нескольких уровнях вложенности, например:
[цит] Gaist-Endruy
( off
)
* (
09:35 24-03-2009
)
Исходный текст
Расширение исходного текста (уровень 1)
Расширение исходного текста (уровень 2)
[цит] Gaist-Endruy
( off
)
* (
09:35 24-03-2009
)
.
.
.
MACRO Mac1
SetPrevPos;
CursorCharRight;
END
MACRO Mac2
Mac1
Mac1
END
.
.
.
Mac2
.
.
.
[цит] Gaist-Endruy
( off
)
* (
09:36 24-03-2009
)
MACRO Mac2
SetPrevPos;
CursorCharRight;
SetPrevPos;
CursorCharRight;
END
Mac2
.
.
.
SetPrevPos;
CursorCharRight;
SetPrevPos;
CursorCharRight;
.
.
.
[цит] Gaist-Endruy
( off
)
* (
09:36 24-03-2009
)
Макровызовы, внутри макроопределений могут включать несколько уровней. Например, команда Mac2 могла бы быть выполнена внутри другого макроопределения. Фактически, такие средства, как макро-переходы дают возможность любое число раз обращаться к любому макроопределению, и даже к самому себе. Такие вызовы называются рекурсивными.
[цит] Gaist-Endruy
( off
)
* (
09:36 24-03-2009
)
МАКРООПРЕДЕЛЕНИЯ В МАКРООПРЕДЕЛЕНИЯХ
[цит] Gaist-Endruy
( off
)
* (
09:36 24-03-2009
)
Мы рассматривали макрокоманды, как обобщенные сокращения для последовательности команд. Представляется разумным разрешить использование в теле макроопределения любых допустимых синтаксисом предложений, в том числе и другие макроопределения.
[цит] Gaist-Endruy
( off
)
* (
09:36 24-03-2009
)
Необходимо, однако, понимать, что внутреннее макроопределение не будет определено до тех пор, пока не произойдет вызов внешнего макроса. Это - следствие метода реализации макроопределений. Например, пусть пользователь хочет определить группу макроопределений для обращения к подпрограммам с помощью какой-то стандартизированной вызывающей последовательности.
[цит]