Оператор вызова макропрограммы

Материал из K3-Macro
Макро | Переменные и выражения | Присваивание значений переменной | Оператор условный | Оператор перехода | Оператор вызова подпрограммы | Оператор выхода в вызывающую макропрограмму | Оператор выхода в интерактивный режим | Оператор вызова макропрограммы | Оператор получения параметров в макропрограмме | Обработка ошибок | Команды системы

Оператор имеет следующий вид.

macro <Name> [oem] [{ByVal | ByRef}] <Param1>, [{ByVal | ByRef}] <Param2>, …, [{ByVal | ByRef}] <ParamN> done

Оператор осуществляет вызов макропрограммы с именем <Name> и передает ей в качестве фактических параметров величины <Param1>, <Param2>, …, <ParamN>. Число фактических параметров не должно быть меньше числа формальных параметров, принимаемых в вызываемой макропрограмме оператором getpar. Ключ oem определяет, что кодировка файла макропрограммы – OEM. По умолчанию считается кодировка ANSI.

Ключи ByVal и ByRef определяют способ передачи параметров (по значению и по ссылке соответственно). Если параметр передается по значению, то изменение этого параметра в вызываемой макропрограмме никак не повлияет на значение параметра в вызывающей. Если параметр передается по ссылке, то фактически передается не параметр, а адрес памяти, где находится значение параметра. В этом случае изменение параметра в вызываемой макропрограмме приведет к изменению значения по переданному адресу памяти. А это вызовет изменение значения параметра в вызывающей макропрограмме. Передача параметра по ссылке часто используется, если в вызывающую макропрограмму нужно вернуть значение из вызываемой.

Если ни один из ключей ByVal или ByRef не задан, то параметр передается по значению.

Пример:

//Текст макро “proba2” 
getpar a1, b1, c1;
a1=a1+b1;
b1=200;
c1="aaaaaaaaaaaaaaaaaaaaaaa";
exit;
A=5;
B=3;
// Здесь по ссылке передаются перменные A и C. 
// Причем С, в момент передачи еще не определена. 
macro "proba2" ByRef A, B, ByRef C;
// По окончании работы будут следующие результаты
=A
8
=B
3
=C
"aaaaaaaaaaaaaaaaaaaaaaa"


В K3 существует еще один оператор вызова макропрограммы.

mrm <NumFile>

Оператор вызывает последнюю вызванную макропрограмму (Most Recently Macro) с номером <NumFile>. Номер макропрограммы <NumFile> должен находится в пределах от 1 до 9. Данная команда в макропрограммах не используется.


Макро | Переменные и выражения | Присваивание значений переменной | Оператор условный | Оператор перехода | Оператор вызова подпрограммы | Оператор выхода в вызывающую макропрограмму | Оператор выхода в интерактивный режим | Оператор вызова макропрограммы | Оператор получения параметров в макропрограмме | Обработка ошибок | Команды системы