Урок 11.3. Внешние переменные
11.3. Внешние переменные
Переменная, определенная вне какой-либо функции, является внешней. Она представляет собой нечто противоположное автоматическим переменным и является глобальной. В точке определения внешней переменной ей выделяется фактическая память. В любой функции, обращающейся к таким переменным, они должны описываться. Это делается либо с помощью явного описания - extern, либо неявно, в контексте.
Обратим внимание на употребление слов "определение" и "описание" по отношению к внешней переменной. "Определение" относится к месту, где фактически порождается или отводится память; слово же "описание" относится к месту, где фиксируется природа переменной, но память для нее не отводится. При некоторых обстоятельствах описание внешних переменных может быть опущено. Если определение внешней переменной встречается во входном файле раньше ее использования в какой-либо конкретной функции, то в этой функции нет необходимости описывать эту переменную как внешнюю. Обычно принято располагать определения всех внешних переменных в начале входного файла, а затем все описания со словом extern опускать.
Если же программа находится в нескольких входных файлах и некоторая переменная определяется, скажем, в файле1, а используется в файле2, то в файле2 для фиксации связи между двумя вхождениями переменной необходимо описание внешних переменных. Рассмотрим различные варианты описания.
Если же программа находится в нескольких входных файлах и некоторая переменная определяется, скажем, в файле1, а используется в файле2, то в файле2 для фиксации связи между двумя вхождениями переменной необходимо описание внешних переменных. Рассмотрим различные варианты описания.
Пример 1.
int hocus; void main() { extern int hocus; /* hocus описана внешней */ //... } void magic() { extern int hocus; //... } |
Здесь есть определение одной внешней переменной hocus, и она известна обеим функциям main() и magic(), в которых она описана явно с помощью описателя extern.
Пример 2.
int hocus; void main() { extern int hocus; //hocus описана внешней //... } void magic() { // hocus не описана совсем //... } |
В этом примере также определена одна внешняя переменная hocus, известная обеим функциям. В функции magic() она описана контекстуально.
Пример 3.
int hocus; void main() { int hocus; // hocus описана и является автоматической по умолчанию //... } void magic() { //в с++ так писать нельзя auto int hocus; // hocus описан автоматической //... } |
В этом примере созданы три разные переменные с одинаковым именем. Переменная hocus в функции main() является автоматической по умолчанию и локальной для main(), в функции magic() она явно описана автоматической и известна только для magic(). Внешняя переменная hocus не известна ни main(),ни magic(), но обычно известна любой другой функции в файле, который не имеет своей собственной локальной переменной hocus.
Внешние переменные существуют, пока работает программа. Они доступны любой функции и не исчезнут, если какая-нибудь одна функция закончит свою работу.
Оставить комментарий