Справочник языка Cи


         

в файле встретится объявление или


и классом памяти extern. Если далее в файле встретится объявление или определение этой функции с другими атрибутами, компилятор сообщит об ошибке.

Область действия функции, объявленной со спецификацией класса памяти static, распространяется на весь исходный файл, в котором она объявлена, т.е. она может быть вызвана из любой точки этого файла, за исключением тех блоков, в которых она локально переобъявляется. Например, в каком-то блоке может быть объявлена функция с тем же именем и классом памяти extern, определенная в другом файле.

Область действия функции, объявленной с классом памяти extern,

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

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

В таблице 2.1 показана взаимосвязь основных факторов, которые определяют время жизни и область действия функций и переменных. При обсуждении области действия переменных мы использовали термин "объявление"; в таблице 2.1 конкретизировано для каждого случая, идет ли речь об объявлении или определении. Область действия функций в таблице 2.1 показана под углом зрения операции получения адреса, а не операции вызова функции. Более подробная информация о влиянии спецификаций класса памяти на область действия объекта приведена в разделе 3.6 "Классы памяти".

Таблица 2.1.





















































































































Уровень



Объект



Спецификация класса памяти



Время жизни



Область действия



Внешний



Определение переменной



static



Глобальное



Остаток исходного файла





Объявление переменной



extern



Глобальное



Остаток исходного файла





Объявление или определение функции



static или extern



Глобальное



Остаток исходного файла



Внутренний



Объявление переменной



extern



Глобальное



Блок





Определение переменной



static



Глобальное



Блок





Определение переменной



auto или register



Локальное



Блок





Объявление функции



extern или static



Локальное



Остаток исходного файла

<

Содержание  Назад  Вперед