Справочник языка Cи


         

в блок порождается новый набор


Для каждого рекурсивного входа в блок порождается новый набор переменных класса памяти auto

и register. При этом каждый раз производится инициализация переменных, в объявлении которых заданы инициализаторы.

Переменная, объявленная на внутреннем уровне со спецификацией класса памяти static, имеет глобальное время жизни, но ее область действия распространяется только на блок, в котором она объявлена (и на все вложенные блоки). В отличие от переменных класса памяти auto, переменные, объявленные со спецификацией класса памяти static, сохраняют свое значение при выходе из блока. Переменные класса памяти static могут быть инициализированы константным выражением. Если явной инициализации нет, то переменная класса памяти static

автоматически инициализируется нулевым значением. Инициализация выполняется один раз во время компиляции и не повторяется при каждом входе в блок. Все рекурсивные вызовы данного блока будут разделять единственный экземпляр переменной класса памяти static.

Переменная, объявленная со спецификацией класса памяти 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;


Содержание  Назад  Вперед