Область (сфера) действия - часть исходного кода программы, в которой идентификатор может быть использован для доступа к связанному с ним объекту.
Область действия идентификатора определяется следующим образом:
1. Если идентификатор объявлен в блоке: область действия от точки объявления до конца блока. Если блок – тело функции, то в нем определены и указанные в заголовке формальные параметры функции. Из области действия могут исключаться внутренние блоки, если в них данный идентификатор используется повторно.
2. Если идентификатор объявлен вне блока: область действия от точки объявления до конца файла.
Область видимости объекта
Понятие видимости объекта по смыслу близко к понятию области действия. Данное понятие стали выделять отдельно в связи с появление в языке Си++ новой операции «изменение области видимости».
Область видимости объекта - часть исходного кода программы, в которой к объекту можно непосредственно обращаться по его идентификатору.
Чаще всего область видимости совпадает с областью действия, различия появляются, если идентификатор используется повторно внутри внутренних блоков в качестве имени для другого объекта. Такие внутренние блоки выпадают из области видимости внешнего объекта.
|
|
Неформально можно записать:
«Область видимости» «≤» «Области действия»
Существует операция изменения области видимости. Ее формат:
::<идентификатор>
Данная операция является унарной и позволяет обращаться к глобальным объектам (переменным) даже если внутри блока данное имя используется для другой переменной.
Пример использования операции:
#include <stdio.h>
int i=1; // Глобальная переменная
void main()
{
int i=2; // Локальная перменнная блока
// Внутри блока глабальная переменная i не видна
printf("i=%d", i); // Печатается i=2
// С помощью операции:: обращаемся к глобальной переменной
printf("\ni=%d",::i); // Печатаеся i=1
::i=100; // Изменяем значение глобальной переменной
}
Продолжительность существования объекта (время жизни)
Продолжительность существования объекта (время жизни) -это интервал времени выполнения программы, в течение которого программный объект (переменная или функция) существует.
Существует три разновидности продолжительности существования:
– статическая, объект существует в течение всего времени выполнения программы;
– локальная, объект существует в пределах выполнения операторов блока;
– динамическая, объект создается и удаляется явным образом с помощью специальных функций (или операторов в Си++).
–
2.2.5. Тип компоновки (связывания)
Тип компоновки (связывания) определяет соответствие идентификатора конкретному объекту в программе, исходный текст которой размещен в нескольких файлах, т.е. можно ли идентификатор использовать в нескольких файлах проекта или его можно использовать только в одном файле.
|
|
Два вида связывания:
• внутреннее, к объекту можно обращаться только в одном файле (модуле) проекта;
• внешнее, к объекту можно обращаться из различных файлов (модулей) проекта, при этом переменная в одном файле должна быть определена, а в других файлах описана с модификатором extern.
Взаимосвязь классов памяти и других атрибутов объектов представлена в таблице 2.
Таблица 2 – Взаимосвязь атрибутов объектов
Класс памяти | Атрибуты объектов | |||
Область действия | Область видимости | Продолжительность существования | Тип связывания | |
auto | От точки описания до конца блока за исключением внутренних блоков, если в них повторно используется идентификатор | От точки описания до конца блока за исключением внутренних блоков, если в них повторно используется идентификатор | Локальная | Внутреннее связывание |
register | ||||
static | От точки описания до конца файла (блока) | От точки описания до конца блока за исключением внутренних блоков, если в них повторно используется идентификатор | Статическая | |
extern | Внешне связывание |
Объявления, определения и описания в языке Си
Существуют различные термины в языке Си, такие как, объявления, определения и описания. В литературе присутствует некоторая терминологическая путаница между этими понятиями, связанная, в том числе, и с переводом английских терминов, частично являющимися синонимами, на русский язык.
Для однозначной интерпретации данных терминов будем понимать их следующим образов.
Объявление объекта (переменной) - это оператор, позволяющий устанавливать атрибуты объекта, резервировать для него память, связывать объект с идентификатором (именем) или делать известным компилятору идентификатор объекта.
Прежде чем использовать объект в программе, он должен быть объявлен. Объявления делятся на два класса: определения и описания.
Определение – это разновидность объявления, которое устанавливает атрибуты объекта (переменной), резервирует для него память и связывает объект с идентификатором (именем).
Описание – эторазновидность объявления, которое делает известным компилятору идентификатор объекта.
Определять объект можно только один раз, описывать множество раз. Рассмотрим отличительные признаки определений от описания применительно для переменных.
Признаки определения переменных:
– объявлена переменная без модификатора extern;
– объявлена переменная с инициализатором.
Признаки описания переменных:
– наличие модификатора extern (инициализация запрещена).