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

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

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

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

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

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

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

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

См. также

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