Урок 11.3. Внешние переменные

11.3. Внешние переменные

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

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

Если же программа находится в нескольких входных файлах и некоторая
переменная определяется, скажем, в файле1, а используется в файле2, то в файле2
для фиксации связи между двумя вхождениями переменной необходимо описание
внешних переменных. Рассмотрим различные варианты описания.

Пример 1.

int hocus;

main()

{ extern int hocus; /* hocus описана
внешней */

 

...

 

}

magic()

{ extern int hocus;

 

...

 

}

Здесь есть определение одной внешней переменной hocus, и она известна обеим функциям main() и magic(),
в которых она описана явно с помощью описателя extern.

Пример 2.

int hocus;

main()

{ extern int hocus; /* hocus описанавнешней */

 

...

 

}

magic()

{ /* hocus не описана совсем */

 

...

 

}

 

В этом примере также определена одна внешняя переменная hocus, известная обеим функциям. В функции magic() она описана контекстуально.

Пример 3.

int hocus;

main()

{ int hocus; /* hocus описана и является

автоматической по умолчанию */

...

 

}

magic()

{ auto int hocus; /* hocus описан
автоматической */

 

...

 

}

В этом примере созданы три разные переменные с одинаковым именем. Переменная
hocus в функции main() является автоматической по умолчанию и
локальной для main(), в функции magic() она явно описана автоматической и известна
только для magic(). Внешняя переменная hocus не известна ни main(),ни magic(),
но обычно известна любой другой функции в файле, который не имеет своей
собственной локальной переменной hocus.

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

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов