extern описатель Хранени-Класса

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

Пример

Этот пример иллюстрирует объявления внутренних и внешний-уровня:

// extern_StorageClassSpecified.c
#include <stdio.h>

void other( void );

int main()
{
    // Reference to i, defined below: 
    extern int i;

    // Initial value is zero; a is visible only within main: 
    static int a;

    // b is stored in a register, if possible: 
    register int b = 0;

    // Default storage class is auto: 
    int c = 0;

    // Values printed are 1, 0, 0, 0: 
    printf_s( "%d\n%d\n%d\n%d\n", i, a, b, c );
    other();
    return;
}

int i = 1;

void other( void )
{
    // Address of global i assigned to pointer variable:
    static int *external_i = &i;

    // i is redefined; global i no longer visible: 
    int i = 16;

    // This a is visible only within the other function: 
    static int a = 2;

    a += 2;
    // Values printed are 16, 4, and 1:
    printf_s( "%d\n%d\n%d\n", i, a, *external_i );
}

В этом примере переменная i определяет во внешнем уровне с исходным значением 1.extern объявление в main функция используется для объявления ссылки на внешний-уровню i.Статический переменная a инициализирует значение 0 по умолчанию, поскольку инициализатор пропущен.Вызов printf введите значения 1, 0, 0 и 0.

в other функция адрес глобальной переменной i используется для инициализации Статический переменная указателя external_i.Это работает, поскольку есть глобальная переменная Статический время существования, его адрес не меняется во время выполнения программы.Теперь переменная i переопределен как локальную переменную с исходным значением 16.Это переопределение не влияет на значение внешний-уровня i, которая является скрытым с помощью своего имени локальной переменной.Значение глобального i теперь доступны только внутри этого блока, косвенно посредством указателя external_i.Попытка присвоить адрес Авто переменная i к указателю не работает, поскольку он может отличаться каждый раз, когда блок вставлена.Переменная a объявляет в качестве a Статический переменно и инициализируется до 2.This a не конфликтует с a IN mainс тех пор Статический переменные на внутреннем уровне видимы только внутри блока в котором они объявлены.

Переменная a увеличивается на 2, отдавая 4 в результат.Если other функция была вызвана снова в одной программе, начальному значению a был 4.Внутренние Статический переменные сохраняют свои значения, если выйти из программы, а затем reenters блок, в котором они объявлены.

См. также

Основные понятия

Описатели Хранени-Класса для объявлений Внутренн-Уровня