Добавил:
Лабы/курсовые по программированию (С++/Verilog HDL), Теория и Практика Помехоустойчивого Кодирования Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1сем Дагаев / lectures_3.pdf
Скачиваний:
34
Добавлен:
09.03.2022
Размер:
769.01 Кб
Скачать

квалификатора. Наличие рассматриваемого квалификатора обязывает компилятор отказаться от выполнения оптимизации.

Квалификатор restrict используется только с указателями и будет рассмотрен в разделе 38.

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

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

последовательность спецификаторов встроенного (фундаментального) типа.

имя перечисления.

typedef-имя.

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

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

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

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

квалификаторы.

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

35.2.Описатели

Основным элементом каждого описателя является объявляемое имя. Этот элемент является обязательным. Кроме того, в объявитель может входить дополнительная информация, относящаяся к типу. В состав дополнительных компонентов могут входить классификаторы типа и некоторые операторы языка Си:

* - оператор разыменования (для объявления указателей см. пункты 17 и

38).

() – оператор функция (для объявления функций см. пункт 37).

[] – оператор индексирования (для объявления массивов см. пункт 39). Оператор * в объявителе используется (по отношению к объявляемому

имени) в качестве префикса, а операторы () и [] – в качестве суффикса. Можно провести некоторую аналогию между использованием операторов в объявителях и выражениях. Суффиксные операторы «сильнее» связаны с именем, чем префиксные.

Приведем примеры объявлений, В комментариях использованы следующие сокращения: ПС – послеовательность спецификаций, СО – список объявителей.

72

int n, m;

//ПС – спецификатор типа int, СО – два идентификатора перемен

//ных: n и m

double *px;

//ПС – спецификатор типа double, СО – идентификатор переменной

//px и префиксный оператор разыменования *

35.3.Использование зарезервированного слова

typedef для объявления синонимов типов

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

встроенный (фундаментальный) тип.

перечисление и структура.

все прочие типы; их характерной особенностью является отсутствие у типа имени.

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

Для перечислений и структур применение typedef позволяет устранить из имени типа зарезервированное слово. Для перечислений таким именем является enum, а для структур – struct.

Для всех оставшихся случаев применение рассматриваемого способа позволяет упростить структуру новых объявлений.

Приведем ряд примеров.

Пример 1. Синоним для встроенного типа. Рассмотрим некоторый фрагмент кода, в котором будет объявлен синоним (integer) для встроенного типа int.

typedef int integer;

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

именем типа int, он имеет возможность пользоваться новым именем. int n;

integer m;

Бессистемное использование этих двух альтернативных возможностей пользы не приносит. Смысл в объявлении синонима в том случае, когда программист откажется от стандартного имени int, и будет использовать альтернативное integer.

integer n, m;

При этом появляется возможность его оперативного изменения. Например, если окажется, что тип int следовало бы заменить другим типом.

73

Соседние файлы в папке 1сем Дагаев