Оператор получения параметров в макропрограмме

Материал из K3-Macro
(перенаправлено с «Getpar»)

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

getpar <Param1>, <Param2>, …, <ParamN>

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

Следует отметить, что, во-первых, число формальных параметров должно быть не больше числа фактических, а во-вторых, что при написании макропрограмм необходимо учитывать специфику передачи данных. А именно: простые переменные (числовые, логические, строковые) передаются по значению, а переменные объектного типа и массивы передаются по ссылке. Что это значит?

При передаче по значению при вызове макропрограммы в памяти компьютера выделяется дополнительный объем для записи значения переменной, а затем в вызываемой макропрограмме это значение читается из данной области памяти и присваивается формальному параметру. То есть, все действия с такой переменной внутри вызываемой макропрограммы не оказывают влияния на значение переменной в вызывающей макропрограмме (если переменная не глобальная). Достоинства такого подхода – независимость вызывающей макропрограммы от вызываемой макропрограммы. Недостатки – расход дополнительного объёма памяти на передачу параметров.

При передаче по ссылке при вызове макропрограммы в памяти компьютера выделяется дополнительный объем для записи адреса памяти, где находится значение переменной, а затем в вызываемой макропрограмме этот адрес памяти читается из данной области и ссылка на него присваивается формальному параметру. То есть, все действия с такой переменной внутри вызываемой макропрограммы оказывают влияние на значение переменной в вызывающей макропрограмме, поскольку ссылаются на один и тот же адрес в памяти машины. Достоинства такого подхода — отсутствие расхода дополнительного объёма памяти на передачу каждого элемента массива и возможность передачи значения из вызывающей макропрограммы в вызываемую. Недостатки – зависимость вызывающей макропрограммы от вызываемой макропрограммы.

При написании макропрограмм такие особенности необходимо учитывать. Игнорирование таких особенностей приводит к труднообнаруживаемым ошибкам.


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