|
Часть 4
ГЛАВА 2.
БЛОКИ, ЛОКАЛИЗАЦИЯ И СФЕРА ДЕЙСТВИЯ
Блоки состоят из объявлений, которые записаны и скомбинированы
в любом порядке, и операторов. Каждый блок является частью
объявления процедуры или функции, или частью программы или модуля.
Все идентификаторы и метки, объявленные в разделе объявлений,
являются локальными для блока.
Синтаксис
В общем виде любой блок имеет следующий формат:
ЪДДДДДДДДДДї ЪДДДДДДДДДДї
блок ДДДДці раздел ГДДДДці раздел ГДДДДц
іобъявленияі іоператорові
АДДДДДДДДДДЩ АДДДДДДДДДДЩ
раздел ДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДц
объявления ш і ш і
і і ЪДДДДДДДДДДДДДДДДДДї і і
і ГДДДціраздел объявления ГДДДДДДґ і
і і і меток і і і
і і АДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДї і і
і ГДДДціраздел объявления ГДДДДДДґ і
і і і констант і і і
і і АДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДї і і
і ГДДДціраздел объявления ГДДДДДДґ і
і і і типов і і і
і і АДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДї і і
і ГДДДціраздел объявления ГДДДДДДґ і
і і і переменных і і і
і і АДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДї і і
і АДДДціраздел объявления ГДДДДДДЩ і
і іпроцедур и функцийі і
і АДДДДДДДДДДДДДДДДДДЩ і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Раздел объявления меток - это та часть блока, где объявляются
метки, присваеваемые оператором в соответствующем разделе
операторов. Каждая метка должна помечать только один оператор.
раздел ЪДДДДДДДї ЪДДДДДДДї ЪДДДї
объявления ДДДДДці 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.
|