Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные

 

Областью действия идентификатора называется часть программы, где он может быть использован и определяется местом его объявления. Если идентификаторы объявлены в рамках одной процедуры или функции, не содержащей вложенных процедур и функций, то такие идентификаторы называются локальными и могут использоваться только в этой подпрограмме.

Если программа, процедура или функция содержит вложенные процедуры или функции, то объявленные в ней идентификаторы являются локальными для той подпрограммы, в которой они объявлены, и глобальными для процедур и функций, вложенных в нее.

Понятие «локальный» или «глобальный» следует понимать относительно, т. е. по отношению к конкретной процедуре или функции.

Пример.

Program Scope;

Var a0,b0,c0: integer;

Procedure p1;

Var a1,b1,c1: integer;

Begin

{ допустимо использование локальных переменных a1, b1, c1

и глобальных переменных a0, b0, c0 }

……….

End;

……….

Begin

{ допустимо использование локальных переменных a0, b0, c0}

…….

End.

Общие правила определения области действия для идентификаторов таковы:

o действуют все идентификаторы, определенные внутри процедуры или функции;

o действуют все идентификаторы окружающего контекста, если они отличаются от имен, объявленных внутри процедуры или функции;

o локальные идентификаторы процедуры и функции во внешнем окружении не будут действовать;

o в случае совпадения имен глобальной и локальной переменной будет действовать только внутренний, локальный идентификатор.

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

Операторы подпрограммы могут обращаться к глобальным данным. Изменение глобальных данных в процедуре или функции называется побочным эффектом. Использование побочного эффекта усложняет отладку программы и ее познаваемость.