2.4. Локальные и глобальные описания объектовМы уже знаем, что программа - блок, т.е. раздел операторов, снабженный описаниями и имеющий заголовок. Вид блока-программы: Program имя программы (возможны опции); {опции не обязательны} Label …; {раздел описания меток} Const …; {раздел описания констант} Туре …; {раздел определения типов} Var …; {раздел описания переменных} Function …; Procedure …; {раздел описания функций и процедур} BEGIN ... END. {раздел операторов}. Функции и процедуры, в свою очередь, также являются блоками: Procedure имя (список входных формальных параметров); Var (список выходных формальных параметров); Label …; Const …; Туре …; Var ...; function …; procedure …; разделы описаний begin ... end; {тело процедуры} Таким образом, программа - всегда блок, в который могут быть вложены другие блоки. Как один из вариантов, возможна следующая структура программы: Program Prim38; { начало блока 1} function f(f,b,c:real):real; { начало блока 2}
procedure proc(f,b,c:real; Var x,y,z:real); { начало блока 3} function fp(a,b:real):real; { начало блока 4} begin BEGIN Таким образом, программа состоит из четырех блоков. Все имена меток, констант, типов, переменных, функции f и Рrос известны в блоке 1, поскольку они даны в его описании. Считается, что они описаны здесь локально. В блоке 2 - function - описаний нет, поэтому своих собственных объектов этот блок не имеет. Формальные параметры не в счет, поскольку они служат только для описания алгоритма вычисления результата с именем f в функции f, а ячейки памяти для b, с, f здесь не выделяются. Однако в этом блоке можно использовать все объекты, которые описаны в блоке 1, так как блок 2 является составляющей частью блока 1. Иногда говорят, что имена объектов блока 1 описаны глобально для блока 2. Аналогичная ситуация и с блоком 3 - Procedure Рrос. Для нее все объекты блока 1 являются глобальными, т.е. доступны. Кроме того, в блоке 3 имеются свои описанные здесь объекты - метки К, L, переменные d, W, 8, функция fp, которые могут быть использованы только в блоке 3 и не известны в блоках 1 и 2. Как следствие возможно применение одинаковых имен в различных блоках (см. имя d). В блоке 1 d - массив. В блоке 3 (в Рrос) имеется свое d, которое является собственным в блоке 3 и представляет собой не массив, а ячейку памяти типа real. |