Типы перечислений |
Вверх Предыдущий Следующий |
Во Free Pascal поддерживаются типы перечислений. Вдобавок к реализации Turbo Pascal, Free Pascal поддерживает также расширенный C подобный стиль задания перечислений, где определенному элементу списка перечисления присвоено значение. Перечислимый тип (см. Глава 12 Выражения для того чтобы увидеть как использовать выражения) При использовании присвоенных перечисляемых типов, присвоенные элементы должны быть в списке в возрастающем числовом порядке, иначе компилятор будет генерировать ошибку. Выражения, используемые в присвоенных перечисляемых элементах, должны быть известны во время компиляции. Таким образом, следующее объявление является корректным объявлением перечисляемого типа: Type Direction = ( North, East, South, West); Cи подобный стиль объявления выглядит следующим образом Type EnumType = (one, two, three, forty := 40,fortyone); В результате порядковое число forty равно 40, а не 3, как это бы было без присвоения ': = 40'. Порядковый номер fortyone равен 41, а не 4, как это бы было без присвоения. После присвоения в перечисляемом объявлении компилятор добавляет 1 к присвоенному значению, чтобы присвоить его следующему перечисляемому элементу. При определении такого перечисляемого типа важно иметь в виду, что перечисляемые элементы должны находится в порядке возрастания. Следующее объявление вызовет ошибку компилятора: Type EnumType = (one, two, three, forty := 40, thirty := 30); Необходимо объявлять сорок и тридцать в правильном порядке. При использовании типов перечисления(имеется ввиду с присвоениями) важно помнить следующие моменты: 1.Функции Pred и Succ не могут использоваться на этом виде перечисляемых типов. Любая попытка вызвать их приведет к ошибке компилятора. 2.Перечисляемые типы хранятся с использованием типа по умолчанию, независимо от фактического числа значений: компилятор не пытается оптимизировать их для сохранения места. Это поведение может быть изменено с помощью директивы компилятора {$PACKENUM N} , которая указывает компилятору минимальное количество байтов, которые будут использоваться для перечисляемых типов. Type
{$PACKENUM 4} LargeEnum = ( BigOne, BigTwo, BigThree );
{$PACKENUM 1} SmallEnum = ( one, two, three );
Var S : SmallEnum; L : LargeEnum; begin WriteLn ('Small enum : ',SizeOf(S)); WriteLn ('Large enum : ',SizeOf(L)); end. После запуска мы увидим следующее: Small enum : 1 Больше информации можно найти в Справочник программиста Free Pascal в разделе директив компилятора. |