Область (сфера) действия, связанного с объектом идентификатора

Область (сфера) действия - часть исходного кода программы, в которой идентификатор может быть использован для доступа к связанному с ним объекту.

Область действия идентификатора определяется следующим образом:

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 (инициализация запрещена).

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: