которая после выполнения операции данного
блок 2, время существования -*/
/* время существования блока 2. */
printf("%d\n", i) ;
/* Программа напечатает i=2. */
{ /* Блок
уровня 3. */
i+=l; printf("%d\n", i);
/* Печатается самая внутренняя переменная с именем i,/*
/* которая после выполнения операции данного блока */
/* становится равной 3. */
}
/* Возвращение к блоку уровня 2. */
printf("%d\n", i) ;
/* Опять печатается i=3. */
)
/* Возвращение к блоку уровня 1. */
printf("%d", i) ;
/* Переменная i=3 исчезает. Теперь самой внутренней переменной */
/* с именем i будет i=l. */
)
Программа 104
#include<stdio.h>
int a;
main()
(
extern int a;
int P ();
a=6; P();
)
int P()
(
extern int a;
printf("a=%d",a);
}
Результат работы программы:
a=6
Областью действия статического внешнего объекта является модуль, в котором описан данный объект. При этом где-либо во внешних описаниях (т.е. вне определения функций) должно быть расположено определение внешнего статического объекта в виде
static <Спецификация типа> <Спецификация данных>;
На основании определения под объект отводится память и может быть произведена инициализация. Статические переменные можно инициализировать только выражениями с константами и с указателями на ранее описанные объекты.
При первом входе в соответствующую локальную область (блок или модуль) статические переменные инициализируются один раз (по умолчанию - нулем). При последующих входах в данную область статические переменные получают те значения, которые они имели при последнем выходе из области.
По умолчанию все функции данного модуля, расположенные
ниже определения
статического объекта, включаются в его область действия - в них не обязательно дополнительно описывать объект для получения к нему доступа. Функции, определения которых расположены в модуле выше определения внешнего статического объекта, для пол\чения доступа к нему должны содержать описание этого объекта с классом памяти extern.
Содержание Назад Вперед