Все описания одной и той же переменной должны быть согласованы. — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

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

2020-06-04 147
Все описания одной и той же переменной должны быть согласованы. 0.00 из 5.00 0 оценок
Заказать работу

Блок

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

Файл

Идентификаторы, описанные вне любого блока, функции, класса или пространства имён имеют глобальную область видимости и постоянное время жизни, а также могут использоваться с момента их определения.

Функция

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

Прототип функции

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

Класс

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

Поименованная область

C++ позволяет явным образом задать область определения имен как часть глобальной области с помощью оператора namespace.

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

Способ обратиться к скрытой локальной переменной отсутствует!!!

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

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

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

В разных пространствах имена могут совпадать, поскольку разрешение ссылок осуществляется по контексту идентификатора в программе.

Пример:

struct Node{ int Node; int i; } Node;

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

Классы идентификаторов в C++

В C++ определено четыре раздельных класса идентификаторов, в пределах каждого из которых идентификаторы должны быть уникальными.

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

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

Третий класс - элементы каждой структуры, класса и объединения. Идентификатор структуры элемента должен быть уникален внутри структуры.

Четвёртый класс – метки, образующие отдельное пространство имен.

Внешние объявления

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

    1. определить ее только в одном модуле как глобальную;
    2. в других модулях объявить ее как внешнюю с помощью модификатора extern.

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

Объявление, в отличие от определения, не создает переменную. Также важно то, что объявление, сделанное с использованием extern, не должно содержать инициализацию: если она присутствует, модификатор extern игнорируется.

Поименованные области

Поименованные области служат для логического группирования объявлений и ограничения доступа к ним. Простейшим примером применения является отделение кода, написанного одним человеком, от кода, написанного другим.

Механизм пространств имен вместе с директивой #include обеспечивают необходимую при написании больших программ гибкость путем сочетания логического группирования связанных величин и ограничения доступа.

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

 

Блок

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

Файл

Идентификаторы, описанные вне любого блока, функции, класса или пространства имён имеют глобальную область видимости и постоянное время жизни, а также могут использоваться с момента их определения.

Функция

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

Прототип функции

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

Класс

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

Поименованная область

C++ позволяет явным образом задать область определения имен как часть глобальной области с помощью оператора namespace.

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

Способ обратиться к скрытой локальной переменной отсутствует!!!

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

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

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

В разных пространствах имена могут совпадать, поскольку разрешение ссылок осуществляется по контексту идентификатора в программе.

Пример:

struct Node{ int Node; int i; } Node;

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

Классы идентификаторов в C++

В C++ определено четыре раздельных класса идентификаторов, в пределах каждого из которых идентификаторы должны быть уникальными.

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

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

Третий класс - элементы каждой структуры, класса и объединения. Идентификатор структуры элемента должен быть уникален внутри структуры.

Четвёртый класс – метки, образующие отдельное пространство имен.

Внешние объявления

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

    1. определить ее только в одном модуле как глобальную;
    2. в других модулях объявить ее как внешнюю с помощью модификатора extern.

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

Объявление, в отличие от определения, не создает переменную. Также важно то, что объявление, сделанное с использованием extern, не должно содержать инициализацию: если она присутствует, модификатор extern игнорируется.

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

Пример 1 представляет описание двух глобальных переменных в файлах one.cpp и two.cpp с помощью заголовочного файла my_header.h.

Пример 1. // my_header.h - внешние объявления extern int a; extern double b; <...> // --------------------------------- // one.cpp #include "my_header.h" int a; <...> // --------------------------------- // two.cpp #include "my_header.h" double b;

 

В данном случае обе переменные доступны в файлах one.cpp и two.cpp.

Если переменная описана как static, область ее действия ограничивается файлом, в котором она описана.

Правило одного определения

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

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

Поименованные области

Поименованные области служат для логического группирования объявлений и ограничения доступа к ним. Простейшим примером применения является отделение кода, написанного одним человеком, от кода, написанного другим.


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.018 с.