Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

ГЛАВА 2. БЛОКИ, ЛОКАЛИЗАЦИЯ И СФЕРА ДЕЙСТВИЯ  


 Предыдущая страница     |     Следующая страница  
Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

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

 

Синтаксис

 

     В общем виде любой блок имеет следующий формат:

 

          ┌──────────┐     ┌──────────┐

блок ────Ў│ раздел   ├────Ў│ раздел   ├────Ў

          │объявления│     │операторов│

          └──────────┘     └───────── $72;┘

 

 

раздел    ──────────┬────────────────────────────────────┬───Ў

объявления    °     │                              °     │

              │     │    ┌──────────────────┐      │     │

              │     ├───Ў│раздел объявления ├──────┤     │

              │     │    │    меток         │      │     │

              │     │    └──────────────────┘      │     │

              │     │    ┌──────────────────┐      │     │

              │     ├───Ў│раздел объявления ├──────┤     │

              │     │    │ констант         │      │     │

              │     │    └──────────────────┘      │     │

              │     │    ┌──────────────────┐      │     │

              │     ├───Ў│раздел объявления ├──────┤     │

              │     │    │    типов         │      │     │

              │     │    └──────────────────┘      │     │

              │     │    ┌──────────────────┐      │     │

              │     ├───Ў│раздел объявления ├──────┤     │

              │     │    │    переменных    │      │     │

              │     │    └──────────────────┘      │     │

              │     │    ┌──────────────────┐      │     │

              │     └───Ў│раздел объявления ├──────┘     │

              │          │процедур и функций│            │

              │          └──────────────────┘            │

              └──────────────────────────────────────────┘

      Раздел объявления меток - это та часть блока,  где объявляются

метки,   присваеваемые   оператором   в   соответствующем   разделе

операторов. Каждая метка должна помечать только один оператор.

 раздел           ┌───────┐       ┌───────┐      ┌───┐

объявления ─────Ў│ label ├──────Ў│ метка ├──┬──Ў│ ; ├───Ў

меток            └───────┘   °   └───────┘  │   └───┘

                             │   ┌───┐      │

                             └───│ , │──────┘

                                 └───┘

      Используемая в качестве метки последовательность  цифр  должна находиться в диапазоне от 0 до 9999.

     Раздел объявления  констант  содержит   объявления   констант, локальных для этого блока.

 раздел         ┌───────┐       ┌────────────┐

объявления ───Ў│ const ├────┬─Ў│ объявление ├───────────┬───Ў

констант       └───────┘ °  │  │ константы  │        °  │

                         │  │  └────────────┘        │  │

                         │  │  ┌───────────────────┐ │  │

                         │  │  │объявленине типиро-│ │  │

                         │  └─Ў│  ванной константы ├─┘  │

                         │     └───────────────────┘    │

                         └──────────────────────────────┘

      Раздел объявления  типов  включает  объявления  всех  типов  в блоке.

 раздел         ┌───────┐       ┌────────────┐

объявления ───Ў│ type  ├──────Ў│ объявление ├────┬───Ў

типов          └───────┘  °    │   типа     │    │

                          │    └────────────┘    │

                          └──────────────────────┘

      Раздел объявления переменных состоит из объявления переменных, локальных для этого блока.

 раздел         ┌─────┐       ┌────────────┐

объявления ───Ў│ var ├──────Ў│ объявление ├────┬───Ў

переменных     └─────┘  °    │ переменной │    │

                        │    └────────────┘    │

                        └──────────────────────┘

      Раздел объявления  процедур  и  функций  состоит из объявления процедур и функций, локальных для этого блока.

 раздел                 ┌────────────┐

объявления ─────────┬─Ў│ объявление ├─────┬────Ў

процедур и       °  │  │ процедуры  │  °  │

функций          │  │  └────────────┘  │  │

                 │  │  ┌────────────┐  │  │

                 │  └─Ў│ объявление ├──┘  │

                 │     │ функции    │     │

                 │     └────────────┘     │

                 │     ┌────────────┐     │

                 ├────Ў│ объявление ├─────┤

                 │     │констрактора│     │

                 │     └────────────┘     │

                 │     ┌────────────┐     │

                 ├────Ў│ объявление ├─────┤

                 │     │дестрактора │     │

                 │     └────────────┘     │

                 └────────────────────────┘

      Раздел операторов  определяет  операторы  или  алгоритмические действия, которые выполняются в блоке.

 раздел           ┌───────────┐

операторов ─────Ў│ составной ├─────Ў

                 │  оператор │

                 └───────────┘  

[начало] [оглавление]    

 

Правила для сферы действия

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

    - Переобъявление во  вложенном  блоке:  допустим,  что  Exterior является блоком,  в котором вложен другой блок Interior.  Если Exterior и Interior имеют идентификаторы с  одинаковым именем,  например,  J, то Interior имеет доступ только к идентификатору  J,  который в нем объявлен, и аналогично Exterior имеет доступ только к идентификатору J, объявление которого он содержит.

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

     - Переобъявление внутри блока:  идентификатор или метка  могут быть объявлены  только  один  раз  на внешнем уровне данного блока. Единственным  исключением  является   случай,   когда объявление указывается в списке полей записи.

      Идентификатор поля  записи  объявляется  внутри  типа записи и  имеет смысл только в сочетании со ссылкой на  переменную этого типа записи. Поэтому вы можете повторно объявить идентификатор  поля (с таким же написанием) в том же самом блоке,  но  не  на  том   же   самом   уровне  в  указанном  типе  записи.  Однако идентификатор, который был ранее объявлен, может быть повторно определен как идентификатор поля в том же самом блоке.

      Сфера действия  идентификатора  компоненты объекта расширяется  на этот тип объекта. См. Главу 3 для дальнейшего объяснения.

  [начало] [оглавление]    

Сфера действия интерфейса и стандартных идентификаторов.

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

     Идентификаторы предопределенных констант,  типов,  переменных, процедур  и  функций  Turbo Pascal действуют,  как если бы они были объявлены в блоке, охватывающем все используемые модули и программу в целом.  В действительности  эти стандартные обьекты определены в модуле System,  который используется любой программой  или  модулем прежде любого модуля,  указанного в предложении uses. Это означает, что любой модуль или  программа  могут  переопределить  стандартные идентификаторы,  а  обращение  к ним может быть выполнено с помощью составного    идентификатора,    например,    System.Integer    или System.Writeln.

[начало] [оглавление]    


 Предыдущая страница     |     Следующая страница  
Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

 

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz