Определение именнованных констант

 

Существуют 3 вида именнованных констант:

- имя любого массива или функции;

- имена членов перечисления;

- любое имя любого типа, в определении которого присутствует модификатор const.

const i = 5;

const char *ip = &i;

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

const int *ip; //константой является объект, на который указывает указатель;

int* const ip; //сам указатель является константой

const char *pc = "Это строка";

pc[2] = 'a'; //ошибка

pc = "Это другая строка"; //верно

 

char* const pc = "Это строка";

pc[2] = 'a'; //верно

pc = "Это другая строка"; //ошибка

 

Использование const предпочтительнее по сравнению с #define, так как использование константы контролирует компилятор.

 

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

 

Используется ключевое слово enum. За ним указывают имя типа перечисления и перечисляют значения, которые может принимать этот тип. Спецификатор enum позволяет программисту создавать собственные типы. Пример:

 

enum weekDays {Monday, Tuesday, Wensday, Thursday, Friday};

 

Идентификаторы перечисления представляют собой целочисленные переменные, которые по умолчанию имеют значения 0,1,..., если не указаны другие значения.

 

weekDays days;

Переменная days теперь может принимать одно из 5 значений.

days = Wensday;

 

Пример 2.

enum colors {Red=2, Green=3};

 

Пример 3. Элементам перечисления можно присваивать значения. Например:

enum VIDEO_BASE_ADDRES { VGA_EGA=0xA000000, CGA=0xB800000,

MONO=0xB000000};

 

Битовые поля

 

В некоторыя задачах для экономии памяти необходимо упаковывать несколько объектов в одно машинное слово. Битовые поля часто используются в устройствах, где используется словосостояние (готово, не готово). В Си для этого определяются поля и доступ к ним. Поле – это последовательность битов внутри одного целого значения. Синтаксис определения полей и доступ к ним основан на понятиях, соответствующих элементам структуры. Например, запись

struct { unsigned a:8;

unsigned b:6;

unsigned c:2;}d;

определяет структуру d, содержащую поле а – 8 битов, поле b – 6 битов, с – 2 бита. Число, следующее за двоеточием указывает число разрядов в поле. Поля описываются как unsigned, чтобы подчеркнуть, что это величины без знака. Отдельные поля теперь обозначаются как d.a, d.b, d.c. С полями можно выполнять различные операции.

d.a= d.b=( d.c<<2)+6;

Поля не могут переходить за границу слова в ЭВМ. Если же очередное поле не помещается в частично заполненное слово, то под него выделяется новое слово.

Поля могут быть безымянными, для таких полей в описании структуры указывается только двоеточие и размер. Такие поля используются как заполнители. Для принудительного перехода на новое слово используется специальный размер 0. Например, в структуре

struct {unsigned a:8;

:2;

unsigned b:6;

:0;

unsigned c:12;} d;

второе поле используется как «заполнитель», а четвертое приводит к выделению нового слова для поля c.

С битовыми полями можно производить различные операции (=, -, …), сдвига.

Битовые поля и объединения можно применять для неявного преобразования типов.

 

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

 

struct DOS-DATE { unsigned int day:5;

unsigned int month:4;

unsigned int year:7;};

union DATE_CONV { unsigned int packed_date;

struct DOS_DATE unpacked_date;};

typedef union DATE_CONV DATE

void main(void) {

struct ffblk ffblk; //структура в которую читается информация о

//файле из каталога, описана в <dir.h>

int done=findfirst(“*.*”, &ffblk,0); //ищет первый файл в каталоге, если

//файл найден, то в done возвращается 0.

if(!done) {//(!done) – это то же самое, что done= =0

DATE d;

d.packed_date=ffblk.ff_date;

printf(%2d/%2d/%4d”,d.unpacked_date,d.unpacked_month, d.unpacked_year+1980);

}

}

 

 








Дата добавления: 2016-02-02; просмотров: 535;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.