ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 4

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

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

               ЪДДДДДДДДДДДДДДДДДї       ЪДДДДДДДДДДДДДДДДДДДї
   блок ДДДДДДі раздел описаний ГДДДДДДі раздел операторов ГДД
               АДДДДДДДДДДДДДДДДДЩ       АДДДДДДДДДДДДДДДДДДДЩ

   раздел ДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВД
   описания  і   ЪДДДДДДДДДДДДДДДДДДДДДї                 і
            і ГДДіраздел описания метокГДДДДДДДДДДДДДДДґ  і
            і і   АДДДДДДДДДДДДДДДДДДДДДЩ               і  і
            і і   ЪДДДДДДДДДДДДДДДДДДДДДДДДї            і  і
            і ГДДіраздел описания константГДДДДДДДДДДДДґ  і
            і і   АДДДДДДДДДДДДДДДДДДДДДДДДЩ            і  і
            і і   ЪДДДДДДДДДДДДДДДДДДДДДї               і  і
            і ГДДіраздел описания типовГДДДДДДДДДДДДДДДґ  і
            і і   АДДДДДДДДДДДДДДДДДДДДДЩ               і  і
            і і   ЪДДДДДДДДДДДДДДДДДДДДДДДДДДї          і  і
            і ГДДіраздел описания переменныхГДДДДДДДДДДґ  і
            і і   АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ          і  і
            і і   ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї  і  і
            і АДДіраздел описания процедур и функцийГДДЩ  і
            і     АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ     і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Раздел описания меток - это та часть блока, где описываются метки, присваиваемые операторам в соответствующем разделе операторов. Каждая метка должна помечать только один оператор. 
                            ХНННННё      ЪДДДДДї       ХНё
  раздел описания меток ДДДіlabelГДДДДДіметкаГДДДВДДі;ГДДДДД
                            ФНННННѕ     АДДДДДЩ   і   ФНѕ
                                     і     ХНё     і
                                     АДДДДДґ,ГДДДДДЩ
                                           ФНѕ

     Используемая в качестве метки последовательность цифр должна находиться в диапазоне от 0 до 9999. 
     Раздел описания констант содержит описания констант, локальных для этого блока. 
                     ХНННННё       ЪДДДДДДДДДДДДДДДДДДї
  раздел описанияДДДіconstГДДДВДДіописание константыГДДДДДДДВД
  констант           ФНННННѕ  і   АДДДДДДДДДДДДДДДДДДЩ      і
                             і і   ЪДДДДДДДДДДДДДДДДДДДДДї  і і
                             і АДДіописание типизованнойГДДЩ і
                             і     іконстанты            і    і
                             і     АДДДДДДДДДДДДДДДДДДДДДЩ    і
                             АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Раздел описания типов включает в себя описания всех типов в блоке. 
                              ХНННННё     ЪДДДДДДДДДДДДДї
    раздел описания типовДДДДіtype ГДДДДіописание типаГДДДВДД
                              ФНННННѕ    АДДДДДДДДДДДДДЩ   і
                                      і                     і
                                      АДДДДДДДДДДДДДДДДДДДДДЩ

     Раздел описания переменных состоит из описаний переменных, локальных для этого блока. 
                        ХНННё     ЪДДДДДДДДДДДДДДДДДДДї
     раздел описанияДДДіvarГДДДДіописание переменнойГДДДДДДВД
     переменных         ФНННѕ    АДДДДДДДДДДДДДДДДДДДЩ      і
                              і                              і
                              АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Раздел описания процедур и функций состоит из описаний процедур и функций, локальных для этого блока. 
                          ЪДДДДДДДДДДДДДДДДДДДДї
 раздел описанияДДДДДВДВДДґ описание процедуры ГДДДДДДДДДДДДДДДД
 процедур и функций  і і  АДДДДДДДДДДДДДДДДДДДДЩ          
                     і і  ЪДДДДДДДДДДДДДДДДДДДДї       і   і
                     і ГДі  описание функции  ГДДДДДДДґ   і
                     і і  АДДДДДДДДДДДДДДДДДДДДЩ       і   і
                     і і  ЪДДДДДДДДДДДДДДДДДДДДДДДДї   і   і
                     і ГДі  описание конструктора ГДДДґ   і
                     і і  АДДДДДДДДДДДДДДДДДДДДДДДДЩ   і   і
                     і і  ЪДДДДДДДДДДДДДДДДДДДДДДДї    і   і
                     і АДі  описание деструктора ГДДДДЩ   і
                     і    АДДДДДДДДДДДДДДДДДДДДДДДЩ        і
                     АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Раздел операторов определяет операторы или алгоритмические действия, которые должны быть выполнены блоком. 
                              ЪДДДДДДДДДДДДДДДДДДДДї
     раздел операторовДДДДДДДі составной оператор ГДДДДДДДДДД
                              АДДДДДДДДДДДДДДДДДДДДЩ

                  Правила для области действия

     Наличие идентификатора или метки в описании означает определение идентификатора или метки. Каждый раз, когда идентификатор или метка встречаются в программе, они должны находиться в области действия этого описания. Область действия идентификатора ил
и метки распространяется от их описания до конца текущего блока, включая все блоки, входящие в текущий блок. Ниже приводится несколько исключений. 
     - Переопределение во вложенном блоке. Допустим, что Exterior является блоком, в который вложен другой блок Interior. Если Exterior и Interior содержат идентификаторы с одинаковым именем, например, j, то Interior имеет доступ только к идентификатору 
j, который в нем описан, и аналогично Exterior имеет доступ только к идентификатору j, описание которого он содержит. 
     - Положение описания внутри блока. Идентификаторы и метки нельзя использовать до тех пор, пока они не описаны. Описание идентификатора или метки должно предшествовать любому вхождению идентификатора или метки в тексте программы, с одним исключением.
 
       Базовый тип типа указатель может быть идентификатором, который еще не описан. Однако, в конечном итоге этот идентификатор должен быть описан в том же разделе описания, где встречается данный тип указатель. 
     - Переопределение внутри блока. Идентификатор или метка могут быть описаны только один раз на внешнем уровне данного блока. Единственным исключением является случай, когда описание указывается внутри блока, входящего в данный, или когда описание ука
зывается в списке полей записи. 
     Идентификатор поля записи описывается в рамках типа запись и имеет значение только в сочетании со ссылкой на переменную этого типа запись. Поэтому вы можете повторно определить идентификатор поля (с таким же написанием) в том же самом блоке, но не н
а том же самом уровне в рамках указанного типа запись. Однако, идентификатор, который был ранее описан, может быть повторно определен как идентификатор поля в том же самом блоке. 
     Область действия компонентов объекта распространяется на область данного типа объекта (см. далее). 
    Область действия интерфейса и стандартных идентификаторов

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


Яндекс цитирования