Область действия идентификатора это часть программы в которой на идентификатор можно ссылаться

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

Ключевые слова

ЯЗЫК ПРОГРАММИРОВАНИЯ С++, ПРОГРАММИРОВАНИЕ, ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННОЙ, МОДИФИКАТОРЫ

Текст научной работы

Каждая переменная, объявленная в программе, имеет две важнейшие характеристики: время существования и область видимости. Эти характеристики взаимосвязаны и влияют на использование переменной в программе. Объявление переменной вводит ее имя в область видимости. Это означает, что имя может использоваться только в определенном месте программы.

Область действия идентификатора — это часть программы, в которой его можно использовать для доступа к связанной с ним области памяти. В зависимости от области действия переменная может быть глобальной или локальной.

Областью видимости идентификатора называется часть программы, из которой допустим обычный доступ к связанной с идентификатором областью памяти.

⎡msk⎦ ⎡talks⎦ JavaScript и передача по ссылке и по значению, через призму статьи Dmitry Soshnikov

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

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

Локальную и глобальную переменные можно объявлять с одним и тем же именем. При этом объявление имени переменной в блоке скрывает объявление этого же имени во внешнем блоке или глобальное имя переменной. После выхода из блока имя внешней по отношению к этому блоку переменной восстанавливает свой смысл.

Таким образом, область видимости и область действия идентификатора несколько различаются, хотя чаще всего область видимости совпадает с областью действия.

Тем не менее, обращение из какого-либо блока к глобальной переменной с тем же именем, что и в данном блоке, может быть организовано посредством использования операции разрешения области видимости (::). Операция (::) дает доступ к глобальной переменной, даже если под тем же именем в области действия объявлена локальная переменная. Приведем пример, поясняющий только что сказанное:

#include #include using namespace std; // убрать эту строку в случае // использования компилятора Borland C++ 5.02 int a=5; int main() < int a=3; // скрывает глобальную переменную cout

Результат выполнения программы будет следующий:

Local block_1: 3 Global: 5 Local block_2: 7 Global: 5 Global after sum: 24 Local block_1: 3 Global: 24

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

System Design Глава 7: Проектирование генерации уникального идентификатора


int a=5; int main() < int a=3, *p; p= cout

Управлять областью видимости и временем существования переменных (или других объектов) можно либо изменением места объявления переменной в программе, либо используя модификаторы (классы памяти) auto, register, extern, static, mutable. Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления переменной. Более подробно о продолжительности хранения данных в памяти можно прочитать в [1].

Читайте также:
Программа основные направления развития культуры

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

Регистровая (register) переменная отличается от автоматической только памятью, выделяемой для ее хранения. Регистровая переменная хранится (по возможности) в регистрах процессора, и поэтому доступ к такой переменной осуществляется гораздо быстрее (переменная класса памяти auto хранится в оперативной памяти). Если свободные регистры памяти отсутствуют, то регистровая переменная становится автоматической.

Внешняя (extern) переменная является глобальной переменной, однако модификатор extern означает, что переменная будет объявлена (без слова extern) в другом месте программы или другом файле, где ей и будет выделена память. Поэтому такой класс памяти используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. Пример:

#include #include using namespace std; // убрать эту строку в случае // использования компилятора Borland C++ 5.02 extern int a; //объявление переменной a int main() < cout

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

Таким образом, если статическую переменную описать, например, внутри функции (локально), то при каждом вызове функции предыдущее значение этой переменной будет сохраняться, что показано в следующем примере, демонстрирующем сложение чисел.

#include #include using namespace std; // убрать эту строку в случае // использования компилятора Borland C++ 5.02 int sum(int x) < static int s; for (int j=1; j

В данном случае переменная s в функции sum описана как static, поэтому она не уничтожается после каждого вызова функции, и, тем самым, позволяет наращивать свое значение при каждом новом вызове функции. В результате выполнения программы на экране будет отображено следующее содержимое:

1= 1 1+2= 3 1+2+3= 6 1+2+3+4= 10 1+2+3+4+5= 15 1+2+3+4+5+6= 21 1+2+3+4+5+6+7= 28 1+2+3+4+5+6+7+8= 36 1+2+3+4+5+6+7+8+9= 45 1+2+3+4+5+6+7+8+9+10= 55

Сравните результат выполнения программы для случая, если вместо строки

static int s;
int s; или int s=0;

Ключевое слово mutable задается в контексте использования спецификатора const. С его помощью можно указать, что некоторый элемент структуры (или класса) может быть изменен, даже если переменная типа структуры (или класса) объявлена со спецификатором const. В примере ниже показано, как это может быть реализовано.

#include «stdafx.h» #include #include using namespace std; struct client < mutable char name1 [20]; char name2 [20]; mutable double percent; mutable int sum; int year; >; const client CL = ; int main() < system(«cls»); cout

Читайте также:
Программа дачные феи отзывы

Здесь спецификатор const структуры CL предотвращает изменение ее элементов, однако спецификатор mutable, предшествующий ее элементам name1, percent и sum, снимает с данных элементов такое ограничение.

Замечание. Если при описании объекта (или переменной) инициализатор не задан, то глобальным объектам, объектам из пространства имен и локальным статическим объектам присваивается нулевое значение соответствующего типа.

Константы в C++

  1. Дмитриев В.Л.

О программировании ветвлений в C++

  1. Дмитриев В.Л.

Об одном подходе к реализации компьютерной системы оценки знаний учащихся

  1. Дмитриев В.Л.

Игровые задачи как мотивация к изучению программирования

  1. Дмитриев В.Л.

Разработка помощника для систем, обеспечивающих электронное обучение

  1. Дмитриев В.Л.

Список литературы

  1. Прата С. Язык программирования С++. Лекции и упражнения, 5-е изд.: Пер. с англ. – М.: Вильямс, 2007. – 1184 с.

Цитировать

Дмитриев, В.Л. Время существования и область видимости переменных в C++ / В.Л. Дмитриев. — Текст : электронный // NovaInfo, 2017. — № 76. — С. 91-95. — URL: https://novainfo.ru/article/14516 (дата обращения: 04.07.2023).

Поделиться

Настоящий ресурс содержит материалы 16+

Источник: novainfo.ru

Как используется модификатор const для переменных?

Ключевое слово const предшествует описанию типа переменной и означает, что во время выполнения программы запрещено изменять значение этой переменной. Любая попытка изменить значение переменной, описанной с таким префиксом, приведет к выдаче компилятором сообщение об ошибке. Префикс const гарантирует, что наша программа не сможет случайно изменить значение переменной.

Может ли тип инициализирующего выражения не совпадать с типом определяемой переменной?

Да, может. int k = ‘a’;

Что такое «область действия идентификатора»? Как она определяется?

Идентификаторы – имена, даваемые переменным и другим программы.

Область действия идентификатора — это часть программы, в которой на идентификатор можно ссылаться. Существуют четыре области действия идентификатора:
1) область действия функция;
2) область действия файл;
3) область действия блок;
4) область действия прототип функции.
Идентификатор, объявленный вне любой функции (на внешнем уровне), имеет область действия файл. Такой идентификатор «известен» всем функциям от точки его объявления до конца файла. Глобальные переменные, описания функции, прототипы функции, находящиеся вне функции — все они имеют областью действия файл.

Доступна ли локальная переменная во вложенных блоках? Если да, как получить к ней доступ? Как получить доступ к глобальной переменной, если ее идентификатор совпадает с локальной переменной?

Локальная переменная – переменные, определяемые внутри функции (их область видимости ограничивается этой функцией).

Да, доступна. ОБЪЯСНЕНИЕ.

Доступ к глобальной переменно, если ее идентификатор совпадает с локальной переменной можно получить с помощью::

int i =::i; // локальной i присваивается значение глобальной i

Какую переменную называют глобальной? Как определяется область действия глобальной переменной?

Глобальная переменная – это переменная, объявленная вне любой функции, класса или пространства имен. Глобальные переменные имеют статический класс памяти, что означает их существование в течении всего времени выполнения программы. Они видимы от места своего объявления до конца того файла, в котором они определены.

Совпадает ли область видимости переменной с областью действия?

Область действия переменной совпадает с областью видимости переменной, если она не перекрывается локальной для вложенного блока переменной с таким же именем.

Как используется операция.

Операция с оператором:: дает внутри блока (функции) доступ к глобальной переменной (только к глобальной) при наличии локальной «тезки»

Читайте также:
Программа управления риском это

int i =::i; // локальной i присваивается значение глобальной i

Символ:: — это символ является знаком операции глобального доступа.

Как инициализировать статические переменные?

static float a = 0; // инициализация статических переменных при первом вызове

Инициализация статический переменных происходит один раз – во время первого вызова функции. При последующих вызовах повторной инициализации не происходит.

30. Определите назначение операций! ~ — побитовое «и» (поразрядное сложение И) – биты результата устанавливаются в 1, если соответствующие биты обоих операндов равны 1

% — остаток от деления

31. Определите назначение операций /

/ — деление (нацело или дробно, смотря что и на что делят)

^ — поразрядное исключающее ИЛИ (Биты результата устанавливаются в 1, если соответствующий бит только одного из операндов равен 1.)

32. Определите назначение операций >> ||

>> — побитовый сдвиг вправо) (ну ещё перегружено для чтения из потока)

Источник: infopedia.su

Область и видимость

Видимость идентификатора определяет части программы, на которые можно ссылаться, — ее область действия. Идентификатор является видимым (т. е. его можно использовать) только в частях программы, охватываемых ее областью, которая может быть ограничена (для повышения ограниченности) файлом, функцией, блоком или прототипом функции, в котором она отображается. Область идентификатора — это часть программы, в которой можно использовать имя. Иногда это называется лексической областью. Существует четыре типа областей: функция, файл, блок и прототип функции.

Все идентификаторы за исключением меток имеют область, определенную уровнем объявления. Видимость идентификаторов внутри программы регулируется следующими правилами для каждого типа области.

Область видимости файла
Декларатор или описатель типа идентификатора с областью видимости файла отображается вне любого блока или списка параметров и доступен из любого места записи преобразования после объявления. Имена идентификаторов с областью действия файла часто называются «глобальными» или «внешними». Область глобального идентификатора начинается с точки его определения или объявления и завершается в конце единицы преобразования.

Область функции
Метка — это единственный тип идентификатора, который имеет область видимости функции. Метка объявляется неявно путем использования в операторе. Имена меток должны быть уникальными внутри функции. (Дополнительные сведения о метках и именах меток см. в статье Оператор goto и помеченные операторы.)

Область действия блока
Декларатор или описатель типа идентификатора с областью видимости блока отображаются внутри блока или в списке объявлений формальных параметров в определении функции. Он является видимым только с момента его определения или объявления до конца блока, содержащего объявление или определение. Его область ограничена данным блоком и любыми блоками, которые является вложенными по отношению к данному блоку, и заканчивается на фигурной скобке, закрывающей связанный блок. Эти идентификаторы иногда называются локальными переменными.

Область видимости прототипа функции
Декларатор или описатель типа идентификатора с областью видимости прототипа функции отображается в списке объявлений параметров в прототипе функции (не является частью объявления функции). Эта область заканчивается в конце декларатора функции.

Описание соответствующих объявлений, используемых для отображения переменных в других исходных файлах, см. в статье Классы хранения в C. Однако переменные и функции, объявленные на внешнем уровне с описателем класса хранения static , доступны только в том исходном файле, в котором они определены. Все остальные функции видимы глобально.

Источник: learn.microsoft.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru