Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Чет про программирование / 14) Глоальные и локальные переменные

.docx
Скачиваний:
24
Добавлен:
25.04.2015
Размер:
16.05 Кб
Скачать

Глобальные и локальные переменные

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

Переменные по области видимости делятся на два типа:

  • локальные — переменная объявляется внутри функции (в этом случае она недоступна для вызовов извне);

  • глобальные — переменная объявляется вне всех функций (в этом случае она доступна отовсюду)

Если блок какой-либо процедуры p1 содержит внутри процедуру p2, то говорят, что p2 вложена в p1.

Любые идентификаторы, введенные внутри какого-либо блока (процедуры, функции) для описания переменных, констант, типов, процедур, называются локальными для данного блока. Такой блок вместе с вложенными в него модулями называют областью действия этих локальных переменных, констант, типов и процедур.

Константы, переменные, типы, описанные в блоке program, называются глобальными. Казалось бы, проще иметь дело вообще только с глобальными переменными, описав их все в program. Но использование локальных переменных позволяет системе лучше оптимизировать программы, делать их более наглядными и уменьшает вероятность появления ошибок.

При написании программ, имеющих вложенные модули, необходимо придерживаться следующих правил:

  1. Описывать идентификаторы в том блоке, где они используются, если это возможно.

  2. Если один и тот же объект (переменная, тип, константа) используются в двух и более блоках, то описать этот объект надо в самом внешнем из них, содержащем все остальные блоки, использующие данный объект.

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

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

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

Конфликт имен переменных

Если локальное и глобальное имя совпадают, то в подпрограмме локальное имя блокирует глобальное. Совпадения глобальных и локальных имен лучше избегать. Чтобы получить доступ к глобальному имени в подпрограмме, его надо указывать составным.

  • <имя программы>.<глобальное имя>