Язык программирования Си для персонального компьютера | страница 56
Переменная, объявленная со спецификацией класса памяти extern, является ссылкой на переменную с тем же самым именем, определенную на внешнем уровне в любом исходном файле программы. Цель внутреннего объявления extern состоит в том, чтобы сделать определение переменной внешнего уровня (как правило, данное в другом исходном файле) доступным именно внутри данного блока. Внутреннее объявление extern не влияет на область действия объявляемой глобальной переменной в любой другой части программы.
Пример:
inl i = 1; /* определение i */
main()
{
/* объявление i, ссылающееся на данное выше определение */
extern int i;
/* начальное значение а равно нулю; область действия а — функция main */
static int a;
/* b будет (по возможности) помещено в регистр */
register int b = 0;
/* по умолчанию с будет иметь класс памяти auto */
int с = 0;
/* печатаются значения 1, 0, 0, 0*/
printf("%d,%d,%d,%d\n", i, a, b, c);
}
other()
/* локальное переопределение переменной i */
int i = 16;
/* область действия переменной а — функция other */
static int a = 2;
a += 2;
/* печатаются значения 16, 4 */
printf("%d,%d\n", i, a);
}
Переменная i определяется на внешнем уровне с начальным значением 1; В функции main объявление i является ссылкой на определение переменной i внешнего уровня. Эта ссылка необязательна, поскольку и без нее внешняя переменная i доступна во всех функциях данного исходного файла. Переменная а класса памяти static автоматически инициализируется нулевым значением, так как явная инициализация опущена. Определяется переменная b регистрового класса памяти и переменная с класса памяти auto. Вызывается стандартная функция printf, которая печатает значения 1, 0, 0, 0.
В функции other переменная i переопределяется как локальная переменная с начальным значением 16. Это не влияет на значение внешней переменной i, поскольку эти переменные никак не связаны между собой. Переменная а объявляется со спецификацией класса памяти static и начальным значением 2. Она никак не связана с переменной а, объявленной в функции main, так как область действия переменных класса памяти