КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

Turbo C++ Version 1.0 Programmer’s Guide

Комментировать

LIB.com.ua [электронная библиотека]: : TURBO C++ Version 1.0 Programmer’s Guide

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

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

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

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

— 29 —
Именующие выражения (Lvalues)

Именующее выражение представляет собой локатор объекта,
выражение, которое обозначает объект. Примером именующего
выражения может служить *P, где P это выражение, дающее не-
пустой указатель. Модифицируемое именующее выражение -это
идентифицирующее выражение, относящееся к объекту, к которо-
му возможен доступ и допустимо его изменение в памяти. Ука-
затель константы const, например, не является модифицируемым
именующим выражением. Указатель на константуможетбыть изме-
нен (а подлежащее обращению по этому указателю значение — не
может).

Исторически в слове Lvalues буква L означает «левый»;
это означает, что Lvalue допускается в левой части (априни-
мающей части) оператора присваивания. Здесь в левой части
оператора присваивания допустимы только модифицируемые име-
нующие выражения. Например, если a и b — это не являющиеся
константами целочисленные идентификаторы с правильно распре-
деленнымидля них областями памяти, тооба они являются моди-
фицируемыми именующими выражениями, и присваиваниятипа a =
1;и b = a + b; вполне допустимы.

Значения переменной (Rvalues)

Выражение a + b не можетявляться именующим выражением,
и выражение типа a + b = a недопустимо, поскольку выражение
в левой части не относится кобъекту. Такие выражения часто
называют значением переменной (значение правой части выраже-
ния).

Типы и классы памяти

Для связи идентификаторов с объектами требуется, чтобы
каждый идентификаторимел как минимум два атрибута: класс па-
мяти и тип (иногда его называют типомданных). Компиля-
торTurboC++ определяет эти атрибуты появным или неявным объ-
явлениям в исходном коде программы.

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

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

Контекст

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

— 30 —
Контекст блока

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

Контекст функции

Единственными идентификаторами, имеющими контекст типа
функции, являются метки операторов. Именаметок могут быть
использованыв операторах goto влюбой точке функции,где объ-
явлена данная метка. Метки объявляютсянеявно; для этого за-
писывается имя_метки: и за ним оператор. Имена меток в пре-
делах функции должны быть уникальными.

Контекст прототипа функции

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

Контекст файла

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

Контекст класса (С++)

Классом можно считать именованный набор компонентов,
включая сюда структуры данных и действующие с ними функции.
Контекст класса относится, за некоторыми исключениями, к
именам компонентов конкретного класса. Классы и ихобъекты
имеют множество специальных правил доступа и определения
контекста; см. стр. 102 — 113 оригинала.

Контекст и пространства имен

Пространство имен — это контекст, в пределах которого
идентификатордолженбыть уникальным. В С существует четыре
раздельных класса идентификаторов:

1. Имена меток операторов goto. Эти имена должны быть
уникальными в пределах функции, в которой они объявлены.

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

В С++ структуры, классы и перечислимые данные относятся
к одному и тому же пространству имен.

3. Имена компонентовструктур и объединений. Они должны
быть уникальными в пределах структуры или блока, в которомо-
ни определены. На тип или смещение с одним и тем же именем в
различных структурах ограничений не существует.

4. Переменные, определения типа и компоненты перечисли-
мых данных. Они должны бытьуникальными вконтексте, где они
определены. Идентификаторы, объявленные внешними, должны
быть уникальными среди переменных, объявленных вовне.

— 31 —

Видимость

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

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

Видимость не может выходить за пределы контекста; но
контекст может превышать видимость.


(*
int i; char ch; // автоматическое распределение по
умолчанию
i = 3; // int i и char ch в контексте и видимы

(*
double i;

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *