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