Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования / Литература по C++ / Б.Керниган,Д.Ричи. Язык С.doc
Скачиваний:
86
Добавлен:
31.05.2015
Размер:
2.11 Mб
Скачать

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

Ниже перечисляются спецификаторы класса памяти:

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

AUTO

STATIC

EXTERN

REGISTER

TYPEDEF

Спецификатор TYPEDEF не реализует памяти и называется

"спецификатором класса памяти" только по синтаксическим со-

ображениям; это обсуждается в п. 16.8. Смысл различных клас-

сов памяти был обсужден в п. 12.

Описания AUTO, STATIC и REGISTER служат также в качестве

определений в том смысле, что они вызывают резервирование

нужного количества памяти. В случае EXTERN должно присутст-

вовать внешнее определение (п. 18) Указываемых идентификато-

ров где-то вне функции, в которой они описаны.

Описание REGISTER лучше всего представлять себе как опи-

сание AUTO вместе с намеком компилятору, что описанные таким

образом переменные будут часто использоваться. Эффективны

только несколько первых таких описаний. Кроме того, в регис-

трах могут храниться только переменные определенных типов;

на PDP-11 это INT, CHAR или указатель. Существует и другое

ограничение на использование регистровых переменных: к ним

нельзя применять операцию взятия адреса &. При разумном ис-

пользовании регистровых описаний можно ожидать получения

меньших по размеру и более быстрых программ, но улучшение в

будущем генерирования кодов может сделать их ненужными.

Описание может содержать не более одного спецификатора

класса памяти. Если описание не содержит спецификатора клас-

са памяти, то считается, что он имеет значение AUTO, если

описание находится внутри некоторой функции, и EXTERN в про-

тивном случае. исключение: функции никогда не бывает автома-

тическими.

16.2. Спецификаторы типа

Ниже перечисляются спецификаторы типа.

Спецификатор-типа:

CHAR

SHORT

INT

LONG

UNSIGNED

FLOAT

DOUBLE

спецификатор-структуры-или-объединения

определяющее-тип-имя

Слова LONG, SHORT и USIGNED можно рассматривать как при-

лагательные; допустимы следующие комбинации:

SHORT INT

LONG INT

USIGNED INT

LONG FLOAT

Последняя комбинация означает то же, что и DOUBLE. В осталь-

ном описание может содержать не более одного спецификатора

типа. Если описание не содержит спецификатора типа, то счи-

тается, что он имеет значение INT.

Спецификаторы структур и объединений обсуждаются в п.

16.5; Описания с определяющими тип именами TYPEDEF обсужда-

ются в п. 16.8.

16.3. Описатели

Входящий в описание список описателей представляет собой

последовательность разделенных запятыми описателей, каждый

из которых может иметь инициализатор.

Список-описателей:

инициализируемый-описатель

инициализируемый-описатель, список-описателей

инициализируемый-описатель:

описатель-инициализатор

необ

Инициализаторы описываются в п. 16.6. Спецификаторы и описа-

ния указывают тип и класс памяти объектов, на которые ссыла-

ются описатели. Описатели имеют следующий синтаксис:

описатель:

идентификатор

( описатель )

* описатель

описатель ()

описатель [константное-выражение

необ]

Группирование такое же как и в выражениях.