Урок 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.

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

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

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

Ваш 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 сайтов