Правило 20 передача параметров-значений (копий фактических параметров, создаваемых в стеке)

Правило 19.

Правило 18.

Рекомендуется использовать ключ проверки стека {$s+/-}. Если проверка стека включена, то при каждом обращении к подпрограмме проверяется наличие свободного места в стеке. Если свободного места нет, то выдаётся сообщение об ошибке и программа прекращает работу. В случае отключенной проверки подобная ситуация может привести к общему сбою работы всей системы.

Отключение проверки ускоряет работу программы, но вся ответственность за её корректную работу ложится на программиста. По умолчанию проверка стека включена.

Рекомендуется использовать различные наборы ключей на этапах отладки и окончательной компиляции программы. Во время отладки следует использовать ключи, включающие различные проверки, и ключ {$d+} (включить отладчик). Во время окончательного создания программы следует использовать ключ {$d-}(выключить отладчик), а также отключить ненужные проверки.

В языке Tурбо Паскаль существует 3 основных способа передачи параметров в подпрограммы:

- передача параметров-значений (копий фактических параметров, создаваемых в стеке);

- передача параметров-переменных (передача через стек адресов переменных в порядке их объявления в процедуре; при этом в описании заголовка функции перед этими переменными должно стоять ключевое слово VAR);

- передача параметров-констант (используется при передаче в функцию параметров, значения которых нежелательно изменять в подпрограмме; передача осуществляется по адресу. Для описания используется

ключевое слово const).

В подпрограммы пользователя лучше предусмотреть передачу данных в виде переменных или констант вместо передачи значений. Это позволяет передавать не копию данных, создаваемую в стеке и требующую при этом дополнительные память и время, а сами данные, что повышает быстродействие.

Function function

Sum(a,b:real):real; sum(VAR a,b:real):real;

Begin begin

Sum:=a+b; sum:=a+b;

end; end;

Еще пример

const

a:integer=5;

b:integer=7;

procedure Inc2(var c:integer;b:integer);

begin

c:=c+c;

b:=b+b;

Writeln('удвоенные:',c:5,b:5)

end;

begin

Writeln('исходные:',a:5,b:5);

Inc2(a,b);

Writeln('результат:',a:5,b:5)

end.

исходные: 5 7

удвоенные: 10 14

результат: 10 7

В этой программе задаются два целых числа 5 и 7. Эти числа передаются процедуре Inc2, в которой удваиваются. Один параметр передается как переменная, другой - как параметр значение.

Удвоение второго формального параметра в процедуре не вызвало изменения фактической переменной b, так как этот параметр описан в заголовке процедуры как параметр-значение.

При обработке сложных типов данных часто приходится пользоваться записями (RECORD). При этом для обращения к полям записи можно использовать два способа доступа: операцию "." или оператор присоединения WITH.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: