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 блок, в котором они объявлены.