Открытые массивы
var
B: array[3..7] of double;
procedure P(var A: array of double);
begin
WriteLN('High(A)=', High(A), ' A[High(A)[=', A[High(A)]:0:2);
WriteLN('Low(A)=', Low(A), ' A[Low(A)[=', A[Low(A)]:0:2);
ReadLN;
end;
begin
B[3] := 3; B[4] := 4; B[5] := 5; B[6] := 6; B[7] := 7;
P(B);
end.
Ключи компиляции (директивы компилятора)
Ключ компиляции задает режим компиляции программы. Этот режим управляет синтаксическими требованиями к исходному тексту программы, а также поведением откомпилированного кода программы.
Ключ является глобальным, если в модуле он может присутствовать только в одном месте – в начале модуля. Режим, задаваемый глобальным ключом, действует на весь модуль.
Ключ является локальным, если в модуле он может присутствовать во многих местах. Режим, задаваемый локальным ключом, действует на тот участок кода, который предшествует прямо противоположному ключу.
Выравнивание полей записей и классов
{$A+}, {$A-}, {$A1}, {$A2}, {$A4}, or {$A8}
или
{$ALIGN ON}, {$ALIGN OFF}, {$ALIGN 1}, {$ALIGN 2}, {$ALIGN 4},
or {$ALIGN 8}
По умолчанию:
{$A8}
или
{$ALIGN 8}
Зона действия: Локальный
Полное вычисление логических выражений
{$B+} or {$B-}
или
{$BOOLEVAL ON} or {$BOOLEVAL OFF}
По умолчанию:
{$B-}
или
{$BOOLEVAL OFF}
Зона действия: Локальный
Пример
x := 3;
{$B-}
if
(x > 4) // Вычисляется
and
(x < 5) // НЕ вычисляется
then . . . ;
Использование длинных строк (AnsiString)
{$H+} or {$H-}
или
{$LONGSTRINGS ON} or {$LONGSTRINGS OFF}
По умолчанию:
{$H+}
или
{$LONGSTRINGS ON}
Зона действия: Локальный
Проверка результата ввода-вывода
{$I+} or {$I-}
или
{$IOCHECKS ON} or {$IOCHECKS OFF}
По умолчанию:
{$I+}
или {$IOCHECKS ON}
Зона действия: Локальный
Разрешение использовать типизированные константы как переменные
{$J+} or {$J-}
или
{$WRITEABLECONST ON} or {$WRITEABLECONST OFF}
По умолчанию:
{$J-}
или
{$WRITEABLECONST OFF}
Зона действия: Локальный
Генерация информации о текущих типах полей, методов, свойств, объявленных в секции Published (RTTI, RunTime Type Information)
{$M+} or {$M-}
или
{$TYPEINFO ON} or {$TYPEINFO OFF}
По умолчанию:
{$M-}
или
{$TYPEINFO OFF}
Зона действия: Локальный
Если класс объявлен в режиме {$M-}, или не является потомком класса, объявленного в режиме {$M+}, секция Published запрещена.
Задание размера стека
{$M <Число: Мин. размер стека>, < Число: Макс. размер стека>}
или
{$MINSTACKSIZE <Число>}
{$MAXSTACKSIZE <Число>}
По умолчанию:
{$M 16384, 1048576}
Зона действия: Глобальный
1024 ≤ <Число: Мин. размер стека> ≤ 2147483647
<Число: Мин. размер стека> ≤ <Число: Макс. размер стека> ≤ 2147483647
Проверка выхода за пределы диапазона
{$R+} or {$R-}
или
{$RANGECHECKS ON} or {$RANGECHECKS OFF}
По умолчанию:
{$R-}
или
{$RANGECHECKS OFF}
Зона действия: Локальный
Пример. TP7
uses crt;
var
i: integer; mA: array[1..10] of longint; mB: array[1..10] of longint;
begin
clrscr;
for i := 1 to 10 do begin mA[i] := 0; mB[i] := 0; end;
{$R-}
i := 12;
mA[i] := -7;
writeln(mA[i]); // -7
writeln(mB[2]); // -7
{$R+}
mA[i] := -7; // RunTime Error
writeln(mA[12]); // Constant Out Of Range
end.