double arrow

Unitl.h

Глава 1

Подчеркнем, что таким образом можно получить доступ только к одноимен-

ной глобальной переменной, а не к локальной переменной, описанной во внешнем

блоке.

Единственными идентификаторами с областью действия прототип функции

являются те, которые используются в списке параметров прототипа функции (см.

разд. 1.7.1). Прототипы функций не требуют имен в списке параметров — требу-

ются только типы. Если в списке параметров прототипа функции используется

имя, компилятор это имя игнорирует. Идентификаторы, используемые в прототи-

пе функции, можно повторно использовать где угодно в программе, не опасаясь

двусмысленности.

Теперь остановимся на проблемах видимости переменных в приложениях,

имеющих несколько модулей. Пусть вы имеете два модуля — Unitl и Unit2 и хо-

тите в модуле Unit2 видеть и использовать переменные и функции, объявленные

в модуле Unitl. Вы можете в модуле Unit2 видеть те переменные, которые являют-

ся глобальными в модуле Unitl, т.е. объявлены вне каких-нибудь функций в заго-

ловочном файле модуля или в его файле реализации. Но для того, чтобы это было

возможно, вы должны повторно объявить их (без инициализации) в модуле Unit2

со спецификацией extern. Например, если в модуле Unitl имеется объявление гло-

бальной переменной

int al = 10;

то в модуле Unit2 вы можете использовать эту переменную, если запишете объяв-

ление

extern int al;•

Причем, это не зависит от того, включили ли вы директивой #include заголо-

вочный файл Unitl.h в модуль Unit2, или нет.

Отметим еще одну особенность использования переменных, описанных в дру-

гом модуле. Если в заголовочном модуле Unitl объявлена описанная выше пере-

менная al, а в модуле Unit2 вы включили директивой #include заголовочный

файл Unitl.h, но не записали объявление этой переменной со спецификацией

extern (вообще не дали объявление al), то в модуле Unit2 будет создана копия пе-

ременной al, инициализированная согласно объявлению в Unitl. Но это будет ко-

пия, совершенно изолированная от переменной al в модуле Unitl. В модулях

Unitl и Unit2 будут существовать две различные переменные с одним именем al.

И изменение одной из них никак не скажется на значении другой.

Все сказанное относится только к глобальным переменным.Локальные пере-

менные, объявляемые внутри функций, невозможно видеть в другом модуле.

Теперь рассмотрим видимость функций в приложениях, имеющих несколько

модулей. Если в модуле Unitl в еш заголовочном файле вне описания класса вы

объявили некоторую функцию F, то в другом модуле Unit2 вы можете использо-

вать ее при выполнении одного из двух условий:

• вы включаете директивой #include в модуль Unit2 заголовочный файл

• вы повторяете в модуле Unit2 (в заголовочном файле или файле реализации)

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

В обоих случаях вы сможете вызвать функцию F из любого места модуля


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: