Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програм. и основы алгорит.з.о..doc
Скачиваний:
11
Добавлен:
17.11.2019
Размер:
293.89 Кб
Скачать

2.4.2 Перечисления

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

enum [ имя_типа ] { список_констант };

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

1)

Enum Err{ERR_READ, ERR_WRITE, ERR_CONVERT};

// ERR_READ=0, ERR_WRITE=1, ERR_CONVERT=2

Err error;

. . .

switch (error){

case ERR_READ: /* операторы */ break;

case ERR_WRITE: /* операторы */ break;

case ERR_CONVERT: /* операторы */ break;

}

2)

enum { two = 2, three, four, ten = 10, eleven, fifty = ten + 40};

// three = 3, four = 4, eleven = 11, fifty = 50

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

2.4.3 Структуры с битовыми полями

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

struct [ имя_struct]{ unsigned | bool имя_поля_1: длина_поля_1;

unsigned | bool имя_поля_2: длина_поля_2;

………..

unsigned | bool имя_поля_n: длина-поля_n ;};

Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа “да / нет” . Минимальная адресуемая ячейка памяти – 1 байт, а для хранения флажка достаточно 1 бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая константа):

struct { bool key : 1;

unsigned keycod : 3;

unsigned keytime : 5;

} mykey;

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

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

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

Ссылки на поле битов выполняются точно так же, как и компоненты общих структур.