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

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;

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

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

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

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