Локальные и глобальные идентификаторы
Использование процедур и функций в Паскале тесно связано с некоторыми
особенностями работы с идентификаторами (именами) в программе. В часности,
не все имена всегда доступны для использования. Доступ к идентификатору в
конкретный момент времени определяется тем, в каком блоке он описан.
Имена, описанные в заголовке или разделе описаний процедуры или функции
называют локальными для этого блока. Имена, описанные в блоке,
соответствующем всей программе, называют глобальными. Следует помнить,
что формальные параметры прцедур и функций всегда являются локальными
переменными для соответствующих блоков.
Основные правила работы с глобальными и локальными именами можно
сформулировать так:
- Локальные имена доступны (считаются известными, "видимыми") только внутри
того блока, где они описаны. Сам этот блок, и все другие, вложенные в него,
называют областью видимости для этих локальных имен.
- Имена, описанные в одном блоке, могут совпадать с именами из других, как
содержащих данный блок, так и вложенных в него. Это объясняется тем, что
переменные, описанные в разных блоках (даже если они имеют одинаковые имена),
хранятся в разных областях оперативной памяти.
Глобальные имена хранятся в области памяти, называемой сегментом
данных (статическим сегментом) программы. Они создаются на этапе компиляции
и действительны на все время работы программы.
В отличие от них, локальные переменные хранятся в специальной области
памяти, которая называется стек. Они являются временными, так как
создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков,
содержащие данный. Это означает, что если в двух блоках, один из которых
содержится внутри другого, есть переменные с одинаковыми именами, то
после входа во вложенный блок работа будет идти с локальной для данного
блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке,
становится временно недоступной и это продолжается до момента выхода из
вложенного блока.
Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее,
вспомогательное назначение, делать локальными. Это предохраняет от
изменений глобальные объекты с такими же именами.
[назад]
[содержание]
[вперед]
СибГУТИ Студенческий Портал