7. Процедуры и функции
47
7. Процедуры и функции
Процедура или функция - именованная часть программы, вызываемая
оператором активизации процедуры или, соответственно, обозначением функции.
Программист может описать новые процедуры и функции. Описания процедур и
функций объединяются и составляют раздел описания процедур и функций. Именами
процедур и функций являются идентификаторы, которые подчиняются правилам
видимости идентификаторов.
7.1. Описание процедуры
Описание процедуры вводит идентификатор процедуры и ставит в соответствие
этому идентификатору некоторый блок и, необязательно, список формальных
параметров. Этот идентификатор называется именем процедуры.
ProcDeclaration =
ProcHeading ';' (Block | Directive) ';'.
ProcHeading =
['segment'] 'procedure' Ident [FormalPList].
Directive =
'forward' | 'external' |
('code' IntConst {',' IntConst}).
Имя процедуры и список формальных параметров задаются в заголовке
процедуры (ProcHeading). Тело процедуры является настоящим блоком. Описание
списка формальных параметров дается ниже. Область действия имени процедуры и
идентификаторов, описанных в списке формальных параметров - блок,
непосредственно содержащий данное описание процедуры.
Процедура может быть описана с помощью одного единственного описания,
состоящего из заголовка процедуры и ее тела. Это самый распространенный способ.
Но есть и другие способы - опережающее описание и описание внешней процедуры.
Когда используется способ опережающего описания, процедуре дается два
описания: первое описание состоит из заголовка процедуры и директивы FORWARD, а
второе описание, которое должно находиться в том же разделе описаний процедур и
функций, лишь идентифицирует процедуру и содержит ее тело. Во втором описании
список формальных параметров можно не указывать. Но если указан, он должен
совпадать со списком формальных параметров первого описания.
Описание внешних процедур позволяет программисту использовать процедуры
и функции, составленные на другом языке программирования и оттранслированные
отдельно. Внешний код должен быть связан с программой при помощи {$L filename } -
директивы.
Применение имени процедуры в операторе процедуры внутри блока ее
собственного описания предполагает рекурсивное использование этой процедуры.
При описании процедуры определяются все объекты, с которыми она работает,
и действия над этими объектами. Если в теле процедуры встречаются некоторые
идентификаторы, не описанные в блоке процедуры и не являющиеся формальными
параметрами, то они считаются глобальными по отношению к данному описанию
процедуры. Их описания должны находиться в начале блоков, обхватывающих данное
описание процедуры.
Использованием префикса SEGMENT перед описанием процедуры указывается
компилятору, что процедура сегментирована (оверлейная). В UniPascal-е этим
способом организуются оверлейные программы. Это означает, что код,
генерируемый для тело процедуры (вместе с вложенными в ней процедурами), будет
<<  <  GO  >  >>

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