Операционная система UNIX. Руководство программиста

     

Видимость внешних объектов


Если функция обращается к идентификатору, описанному как extern, то в каком-нибудь из файлов (либо библиотек), составляющих полную программу, должно быть по крайней мере одно внешнее определение данного идентификатора. Все функции некоторой программы, обращающиеся к одному и тому же внешнему идентификатору, ссылаются тем самым на один объект; поэтому нужно следить, чтобы тип и размер, специфицированные в определении, были совместимы с теми, которые задаются в функциях, обращающихся к данному объекту.

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

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

Если функция обращается к идентификатору, описанному как extern, то в каком-нибудь из файлов (либо библиотек), составляющих полную программу, должно быть по крайней мере одно внешнее определение данного идентификатора. Все функции некоторой программы, обращающиеся к одному и тому же внешнему идентификатору, ссылаются тем самым на один объект; поэтому нужно следить, чтобы тип и размер, специфицированные в определении, были совместимы с теми, которые задаются в функциях, обращающихся к данному объекту.

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

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

Идентификаторы, описанные на верхнем уровне внешних определений как static, невидимы в других файлах. Функции могут быть описаны как static.



Содержание раздела