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

Turbo C++ Version 1.0 Programmer’s Guide

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

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

Спецификаторы класса памяти

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

auto register typedef
extern static

— 46 —

Использование спецификатора класса памяти auto

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

Использование спецификатора класса памяти extern

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

Использование спецификатора класса памяти register

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

Turbo C++ позволяет вам выбрать опции размещения пере-
менных в регистрах в диалоговом поле Options \! Compiler \!
Optimization. При выборе опции Automatic TurboC++ сделает
попытку распределить регистры даже еслиспецификаторы класса
памяти register не задавались.

Использование спецификатора класса памяти static

Спецификатор класса памяти static может использоваться
в объявлениях функций и переменных с контекстом файла и ло-
кальным контекстом для обозначения внутреннего типакомпонов-
ки. Static также указывает, что переменная должна иметьста-
тическую продолжительность существования. При отсутствии
конструкторовили явныхинициализаторов статические переменные
инициализируются 0 или null.

В С++ компоненты класса,статические данные, имеет то же
значение длявсех вхождений класса. Члены класса, статические
функции, не зависят от других вхождений класса.

Использование спецификатора класса памяти typedef

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

static long int biggy;
typedef long int BIGGY;

Первое объявление создает 32-битовый объект типа long
int, со статической продолжительностью существования и име-
нем biggy. Второе объявление устанавливает идентификатор
BIGGY в качестве спецификаторановоготипа, не создавая при

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

extern BIGGY salary;

имеет тот же эффект, что и

extern long int salary;

Хотя данный простой пример может быть равным образом
реализован при помощи #define BIGGY long int, в более слож-
ных случаях typedef позволяет добиться большего, нежели с
помощью текстовых подстановок.

Важное замечание!

typedef не создает новых типов данных; это ключевое

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

typedef double (*PFD)();
PFD array-pfd[10];
/* array_pfd это массив из 10 указателей на функции,
возвращающие значения типа double */

Нельзя использовать идентификаторы typedef со специфи-
каторами других типов:

unsigned BIGGY pay; /* НЕДОПУСТИМО */
Модификаторы

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

Модификаторы Turbo C++ Таблица 1.16
————————————————————
Модификатор Используется с Использование
————————————————————
const Только переменными Предотвращает изменения объекта

volatile Только переменными Предотвращает распределение
регистров и некоторые виды оптимизации. Предупреждает компи-
лятор о том, что объект при вычислении может получить какие-
либо изменения извне.

В С++ const и volatile расширены и включают классы и
функции.

Расширения Turbo C++

cdecl Функции Устанавливает соглашения С пере-
дачи аргументов

cdecl Переменные Устанавливает учет регистра иден-
тификатора и ведущие знаки подчер-
кивания

pascal Функции Устанавливает соглашения пере-
дачи аргументов Паскаля

pascal Переменные отменяет учет регистра идентифи-

— 48 —
катора и ведущие знаки подчерки-
вания

interrupt Функции Функция компилируется с дополни-
тельным кодом управления реги-
стром, необходимыми при написании
обработчиков прерываний

near, Переменные Переопределяет умолчание типа
far, указатели указателя, задаваемое текущей
huge моделью памяти

_cs, Переменные Указатели сегмента;
_ds, указатели см. стр.199 оригинала
_es,
_seg,
_ss

near, Функции Переопределяет умолчание типа
far, функции, задаваемое текущей
huge моделью памяти

near, Переменные Определяет размещение объекта в
far, памяти

_export Функции Только OS/2. Turbo C++ это
игнорирует

_loadds Функции Устанавливает регистр DS на
текущий сегмент данных

_saveregs Функции Предохраняет все значения регис-
тров (кроме значений возврата)
во время выполнения функции
————————————————————
Модификатор const

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

const float pi= 3.1415926;
const maxint = 32767;
char *const str= «Hello, world!»; // указатель константа
char const *str2= «Hello, world!»; // указатель на
константу

Использование одного только модификатораconst эквива-
лентно const int.

Страницы: 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 не будет опубликован. Обязательные поля помечены *