7. Процедури
и 
7. Процедури и функции
Процедура или функция се нарича именована част от програмата, която се
извиква (изпълнява) с помощта на оператора за извикване на процедура или чрез
използуване на името на функцията в израз. Програмистът може да описва нови
функции и процедури. Имената на процедурите и функциите са идентификатори, които
се подчиняват на правилата за видимост на идентификаторите. Описанията на
процедурите и функциите се обединяват в общ раздел на описание на процедури и
функции.
7.1. Описание на процедура
Описанието на процедура е предназначено за дефиниране на нейното име,
свързания с това име блок и указване на списък от формални параметри. Името на
процедурата и параметрите се задават чрез заглавната част от описанието на
процедурата.
ProcDeclaration =
ProcHeading ';' (Block | Directive) ';'.
ProcHeading =
['segment'] 'procedure' Ident [FormalPList].
Directive =
'forward' | 'external' |
('code' IntConst {',' IntConst}).
Обикновено след заглавната част от описанието на процедурата следва нейното
тяло (Block). Това е най-разпространения вид описание на процедура.
Друг вид описание е изпреварващото описание. При него се дават две описания
на процедурата. При първото - след заглавната част от описанието следва директивата
FORWARD. По този начин процедурата може да се използва преди да е описано
нейното тяло. Второто описание на процедурата трябва да бъде дадено до края на
раздела за описание на блока, в които е дадено изпреварващото описание, и трябва да
съдържа тялото на процедурата (не се разрешава второто описание да съдържа
директива). В стандарта на Pascal второто описание не трябва да съдържа списък с
формалните параметри. В UniPascal е разрешено да се даде повторно списъка с
формални параметри, но в такъв случай той трябва да съвпада със списъка от
изпреварващото описание.
Директивата EXTERNAL е предвидена за свързване към програмата на външни
процедури (написани на асемблер).
Директивата CODE е за специален вид процедури, чиито код (Y код) се дава
непосредствено след директивата.
Използването на префикса SEGMENT пред описанието на процедурата указва на
компилатора, че процедурата е сегментирана. В UniPascal по този начин се реализират
овърлейните подпрограми. Това означава, че кодът, генериран за тялото на
процедурата (заедно с вложените в нея процедури), ще се намира в паметта на
компютъра само докато тя (или някои от вложените в нея процедури) е активна. Ако
имате поне една сегментна процедура в тялото на програмата (модула), то файлът, в
който е генериран кодът на програмата (модула), не се затваря по време на работа на
програмата, за да може да се зарежда в паметта при необходимост.
Ако в тялото на описваната процедура има обръщение към самата нея, то тя е
рекурсивна. Изпреварващо описание се използва, когато е налице неявна рекурсия
(процедурата A използва B, която на свой ред използва A и не е вложена в нея).
<<  <  GO  >  >>

Вернуться к началу сайта