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

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

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

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

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

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

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

K3.png

Пример на макроязыке к3:


 //Текст макро “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. Данная команда в макропрограммах не используется.

См. также

  • Macro — команда для программирования на Python

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