Библиотека программиста

«Любой дурак может написать программу, которую поймет компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты»

Мартин Фаулер

Главная страница > Язык Object Pascal > 17. Константы

17. Константы

Константы можно подразделить на следующие категории:

v числовые (numerals);

v строковые константы (string constants, character strings or string literals);

v константы, используемые для задания перечисляемого типа;

v предопределенные константы (True, False, and nil);

v объявляемые константы (declared constants).

Константы, которые вводятся с помощью индивидуальных описаний (объявлений) подразделяются, в свою очередь, на истинные и типизированные (true constants or typed constants). Они внешне похожи, однако подчиняются разным правилам и используются для разных целей.

Формат объявления истинных констант:

const identifier = constantExpression;

Если константное выражение имеет порядковый тип, можно использовать приведение типа (typecast), например:

const MyNumber = Int64(17);

Если константное выражение:

v является строкой символов, то оно совместимо со строкой любого типа;

v имеет вещественный тип, то компилятор выбирает для константы тип Extended;

v имеет целочисленный тип, то для него выбирается тип Longint, если только значение константы не выходит за границу диапазона для этого типа. В противном случае для константы выбирается тип Int64.

В константных выражениях можно использовать функции, перечисленные в таблице.

Abs

Addr

ArcTan

Chr

Cos

Exp

Frac

Hi

High

Int

Length

Ln

Lo

Low

Odd

Ord

Pred

Round

Sin

SizeOf

Sqr

Sqrt

Succ

Swap

Trunc

Типизированные константы

Эти константы, в отличие от истинных, могут иметь тип массив, запись, указатель или процедурный. Вообще они могут иметь любой тип, кроме файлового и варианта. По умолчанию (директива компилятора {$J+}) типизированные константы могут изменять свои значения в процессе выполнения программы, т.е. ведут себя как инициализированные переменные. В случае указания директивы компилятора {$J–} они ведут себя как истинные константы, т.е. переменные, доступные только для чтения (read-only variables).

Директива компилятора {$J+} введена для совместимости с ВР и младшими версиями Delphi. В новых приложениях рекомендуется инициализировать переменные вместо использования типизированных констант.

Примеры:

const Digits: array[0..9] of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

const Digits: array[0..9] of Char = '0123456789';

type TCube = array[0..1, 0..1, 0..1] of Integer;

const Maze: TCube = (((0, 1), (2, 3)), ((4, 5), (6,7)));.

type

TPoint = record

X, Y: Single;

end;

TVector = array[0..1] of TPoint;

TMonth = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);

const

Origin: TPoint = (X: 0.0; Y: 0.0);

Line: TVector = ((X: - 3.1; Y: 1.5), (X: 5.8; Y: 3.0));

Процедурные константы.

Пример:

function Calc(X, Y: Integer): Integer;

begin

. . .

end;

type TFunction = function(X, Y: Integer): Integer;

const MyFunction: TFunction = Calc;.

. . .

I := MyFunction(5, 7)

Константы типа указатель.

При объявлении такая константа должна быть инициализирована так, чтобы адрес, по крайней мере, относительный, мог быть вычислен на этапе компиляции. Для этого есть три способа: с помощью операции взятия адреса @, константы nil и, если константа имеет тип PChar, с помощью строковой константы. Например, если I является глобальной переменной, можно объявить константу так:

const PtrI: ^Integer = @I;

Другие примеры:

const PF: Pointer = @MyFunction;

WarningStr: PChar = 'Warning!';

Локальные и динамические переменные не могут использоваться для инициализации константных указателей.





<< Предыдущая статья
«16. Переменные»
Следующая статья >>
18. Описания подпрограмм