Оператор вызова макропрограммы
Оператор имеет следующий вид.
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. Данная команда в макропрограммах не используется.