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 из любого места модуля


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