НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

14.4. Локальные и глобальные переменные

Напомним, что каждый модуль (процедура, функция, программа) состоит из заголовка (PROCEDURE..., FUNCTION..., PROGRAM...) и блока.

Пример 1.


Вложенные процедуры. Если блок какой-либо процедуры Р1 содержит внутри процедуру Р2, то говорят, что Р2 вложена в Р1. Пример.


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

Пример 2.


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

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

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

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

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

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

Пример 3.


Если один и тот же идентификатор описан в блоке В и второй

раз описан во вложенном в В блоке С, то надо помнить, что эти

два одинаковых идентификатора соответствуют равным ячейкам памяти.

Пример 4.



Глобальным переменным I и А отводятся две ячейки памяти. Первыми выполняются операторы А: = 2.0 и 1:=15. Затем вызывается процедура Р(А). В процессе работы Р отводится ячейка для локальной переменной I и туда засылается число 3. После окончания работы процедуры Р эта ячейка I программой "забывается". После возврата на оператор WRITELN программа "знает" только одну ячейку I - глобальную, т. е. ту, которая содержит число 15. Поэтому программа Т3 выдаст на печать 1 = 15, А = 23.0, так как А = 3 + 10*2.

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


В этом примере переменные А и В описаны через общий тип АВ. Если же локальная и глобальная переменные описаны одинаково, но не через общий тип, то программа может "не понять", что эти переменные принадлежат одному типу.

Пример.


В этом примере переменные А и В - одинаковые массивы, т. е. типы этих переменных одинаковы, но программа тем не менее "не считает", что А и В - принадлежат одному типу. Это происходит из-за того, что описание массивов дано в разных блоках.

предыдущая главасодержаниеследующая глава

Заходи на https://hab.inditail.net и знакомься с горячими незнакомками, готовыми сделать твои ночи незабываемыми.








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь