Язык программирования Си для персонального компьютера | страница 22



В таблице 2.1 показана взаимосвязь основных факторов, которые определяют время жизни и область действия функций и переменных. При обсуждении области действия переменных мы использовали термин "объявление"; в таблице 2.1 конкретизировано для каждого случая, идет ли речь об объявлении или определении. Область действия функций в таблице 2.1 показана под углом зрения операции получения адреса, а не операции вызова функции. Более подробная информация о влиянии спецификаций класса памяти на область действия объекта приведена в разделе 3.6 "Классы памяти".

Таблица 2.1.

УровеньОбъектСпецификация класса памятиВремя жизниОбласть действия
ВнешнийОпределение переменнойstaticГлобальноеОстаток исходного файла
 Объявление переменнойexternГлобальноеОстаток исходного файла
 Объявление или определение функцииstatic или externГлобальноеОстаток исходного файла
ВнутреннийОбъявление переменнойexternГлобальноеБлок
 Определение переменнойstaticГлобальноеБлок
 Определение переменнойauto или registerЛокальноеБлок
 Объявление функцииextern или staticЛокальноеОстаток исходного файла

Следующий пример программы иллюстрирует понятия блочной структуры, времени жизни и области действия переменных.

/* i определяется на внешнем уровне */

int i = 1;

/* функция main определяется на внешнем уровне */

main()

{

/* печатается 1 (значение переменной i внешнего уровня) */

printf("%d\n", i);

/* первый вложенный блок */

{

/* i переопределяется */

int i = 2, j = 3;

/* печатается 2, 3 */

printf("%d\n%d\n", i, j);

/* второй вложенный блок */

{

/* i переопределяется */

int i = 0;

/* печатается 0, 3 */

printf("%d\n%d\n, i, j);

/* конец второго вложенного блока */

}

/* печатается 2 (восстановлено определение i в охватывающем блоке) */

printf("%d\n", i);

/* конец первого вложенного блока */

}

печатается 1 (восстановлено определение внешнего уровня)*/

printf("%d\n", i);

/* конец определения функции main */

}

В этом примере показано четыре уровня области действия: самый внешний уровень и три уровня, образованных блоками. Функция printf определена в библиотеке стандартных функций (см. раздел 12). Функция main печатает значения 1, 2, 3, 0,3,2,1.

Пространства имен

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