Содержание
В этой главе описаны правила, определяющие область действия описания, и правила, определяющие видимость идентификаторов в различных точках текста программы. Формулировка правил видимости использует понятие зоны описания.
Ссылки: видимость 8.3, зона описания 8.1, идентификатор 2.3, область 8.2, описание 3.1.
Зона описания является частью текста программы. Единичная зона описания — это:
• Описание подпрограммы, описание пакета, описание задачи или описание настройки с соответствующим телом (если оно есть). Если это тело — след тела, то зона описания включает также соответствующий субмодуль. Если программный модуль содержит субмодули, то они также включаются в зону описания.
• Описание входа с соответствующими операторами принятия.
• Описание именуемого типа с соответствующими описанием личного типа или неполным описанием типа (если они есть) и спецификатором представления записи (если он есть).
• Описание переименования, содержащее раздел формальных параметров, или описание параметров настройки, включающее либо раздел формальных параметров, либо раздел дискриминантов.
•Оператор блока или оператор цикла.
В каждом из перечисленных выше случаев говорят, что зона описания связана с соответствующим описанием или оператором. Описание находится непосредственно в зоне описания, если она является самой вложенной охватывающей данное описание без учета зоны описания (если она есть), связанной с самим описанием.
Описание, которое находится непосредственно в зоне описания, является локальным в этой зоне. Говорят, что описания во внешних (охватывающих) зонах являются глобальным по отношению к внутренней (охватываемой) зоне описания. Локальные понятия — это те, которые описаны непосредственно локальными описаниями; глобальные понятия — это те, которые описаны посредством глобальных описаний.
Некоторые из упомянутых выше форм зон описания включают несколько разъединенных разделов (например, между описанием пакета и его телом могут быть помещены другие элементы описания). Тем не менее каждая зона описания рассматривается как непрерывная часть текста программы (логически). Следовательно, если какое-либо правило определяет часть текста, расположенного от некоторой выделенной точки зоны описания до конца зоны, то эта часть является соответствующим подмножеством данной зоны описания (в нее не включаются, например, промежуточные элементы описания, расположенные между двумя разделами пакета).
Примечание. Как определено в разд. 3.1, в термин описание включаются основные описания, неявные описания и описания, являющиеся разделом основных описаний, например спецификации дискриминантов и параметров. Из определения зоны описания следует, что спецификация дискриминанта находится непосредственно в зоне, связанной с охватывающим описанием именуемого типа. Аналогично спецификация параметра находится непосредственно в зоне, связанной с телом охватывающей подпрограммы или с оператором принятия.
Пакет STANDARD образует зону описания, которая охватывает все библиотечные модули;предполагается, что неявное описание каждого библиотечного модуля находится непосредственно в этом пакете (см. разд. 8.6 и 10.1.1).
Зоны описания могут быть вложены в другие зоны описания. Например, подпрограммы, пакеты, задачные модули, настраиваемые модули и операторы блока могут быть вложены друг в друга и содержать описания именуемого типа, оператор цикла, а также операторы принятия.
Ссылки: библиотечный модуль 10.1, задачный модуль 9, именуемый тип 3.7, настраивав-1 мое тело 12.2, неполное oni-ср.ние типа 3.8.1, неявное описание 3.1, оператор блока 5.6, оператор принятия 9.5, оператор цикла 5.5, описание 3.1, описание входа 9.5, описание задачи 9.1, описание личного типа 7.4, описание настройки 12.1, описание пакета 7.1, описание параметров настройки 12.1, описание переименования 8.5, описание подпрограммы 6.1, основное описание 3.1, пакет 7, раздел дискриминантов 3.7.1, раздел формальных параметров 6.1, след тела 10.2, спецификатор представления записи 13.4, спецификация дискриминанта 3.7.1, спецификация параметра 6.1, стандартный пакет 8.6, субмодуль 10.2, тело задачи 9.1, тело пакета 7.1, тело подпрограммы 6.3.