Поделиться через


Область и видимость

Видимость идентификатора определяет части программы, в которых можно сослаться на идентификатор, то есть ее область. Идентификатор является видимым (т. е. его можно использовать) только в частях программы, входящих в ее область, которая может быть ограничена (в порядке повышение количества ограничений) файлом, функцией, блоком или прототипом функции, в котором она отображается. Область идентификатора — это часть программы, в которой можно использовать имя. В некоторых случаях она называется лексической областью. Существует четыре типа области: функция, файл, блок и прототип функции.

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

  • Область видимости файла
    Декларатор или описатель типа идентификатора с областью видимости файла отображается вне любого блока или списка параметров и доступен из любого места записи преобразования после объявления. Имена идентификаторов с областью видимости файла часто называются глобальными или внешними. Область глобального идентификатора начинается с момента его определения или объявления и заканчивается в конце записи преобразования.

  • Область видимости функции
    Метка — это единственный тип идентификатора, который имеет область видимости функции. Метка объявляется неявно путем использования в операторе. Имена меток должны быть уникальными внутри функции. (Дополнительные сведения о метках и именах меток см. в разделе Оператор goto и оператор с меткой.)

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

  • Область видимости прототипа функции
    Декларатор или описатель типа идентификатора с областью видимости прототипа функции отображается в списке объявлений параметров в прототипе функции (не является частью объявления функции). Эта область заканчивается в конце декларатора функции.

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

См. также

Основные понятия

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