Областью действия идентификатора называется часть программы, где он может быть использован и определяется местом его объявления. Если идентификаторы объявлены в рамках одной процедуры или функции, не содержащей вложенных процедур и функций, то такие идентификаторы называются локальными и могут использоваться только в этой подпрограмме.
Если программа, процедура или функция содержит вложенные процедуры или функции, то объявленные в ней идентификаторы являются локальными для той подпрограммы, в которой они объявлены, и глобальными для процедур и функций, вложенных в нее.
Понятие «локальный» или «глобальный» следует понимать относительно, т. е. по отношению к конкретной процедуре или функции.
Пример.
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 в случае совпадения имен глобальной и локальной переменной будет действовать только внутренний, локальный идентификатор.
Локальные переменные создаются при вызове процедуры или функции и существуют только во время ее выполнения. Выделение памяти для локальной переменной происходит автоматически в начале выполнения подпрограммы, а освобождение этой памяти – как только выполнение подпрограммы заканчивается.
Операторы подпрограммы могут обращаться к глобальным данным. Изменение глобальных данных в процедуре или функции называется побочным эффектом. Использование побочного эффекта усложняет отладку программы и ее познаваемость.