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

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

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

int errupt;   /* Три переменные, описанные вне функции */

char coal;

double up;

main( )

{

extern int errupt;  /* объявлено, что 3 переменные */

extern char coal; /* являются внешними */

extern double up;

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

     Если слово extern не включено в описание внутри функции, то под этим именем создается новая автоматическая переменная. Вы можете пометить вторую переменную как "автоматическую" с помощью слова auto и тем самым показать, что это ваше намерение, а не оплошность. Три примера демонстрируют четыре возможных комбинация описаний:

/* Пример1 */

int hocus;

main( ) {

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

...

}

magic( ) {

extern int hocus;

...

}

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

/* Пример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.

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