Директива $R компілятора Delphi визначає, чи перевіряє Delphi межі масиву.
- {$R FileName}
- {$R-}
- {$R+}
Директива компілятора $R має дві форми. По-перше, вона визначає файл ресурсу, який буде відкомпільовано. По-друге, вона визначає, чи повинен Delphi додати код для перевірки меж масиву.
Варіант 1.
Визначає файл ресурсу. Дивіться $Resource для більш детальної інформації.
Варіанти 2 і 3.
За замовчуванням, воно вимкнено (-), означаючи, що "поганий" доступ до масиву пройде непоміченим, показавши себе в частині коду, що важко налагоджується.
Рекомендовано увімкнути $R, щоб виявити проблеми меж масиву. Це призведе до виключення, дозволяючи перевірити код і виправляти знайдені точки відмови.
Примітка.
$R FileName еквівалентна $Resource FileName.
$R- еквівалентна $RangeChecks Off.
$R+ еквівалентна $RangeChecks On.
Вона може і повинна бути встановлена у вашому коді лише один раз.
$R- є значенням за замовчуванням.
Директива компілятора $R: Захоплення проблем, пов'язаних з масивом
var
myArray : array[1..5] of string;
i : Integer;
begin
// Перевірка діапазону увімкнена
{$R+}
// Масив починається з 0 – зазвичай нормально, але наш масив починається з 1
for i := 0 to 5 do
begin
myArray[i] := 'Element '+IntToStr(i);
ShowMessage('myArray['+IntToStr(i)+'] = '+myArray[i]);
end;
end;
Результат
Delphi видасть виняток ERangeError
Директива компілятора $R: Ігнорування проблем меж масиву
var
myArray : array[1..5] of string;
i : Integer;
begin
// Перевірка діапазону вимкнена
{$R-}
// Масив починається з 0 – зазвичай нормально, але наш масив починається з 1
for i := 0 to 5 do
begin
myArray[i] := 'Element '+IntToStr(i);
ShowMessage('myArray['+IntToStr(i)+'] = '+myArray[i]);
end;
end;
Результат
myArray[0] = Element 0
myArray[1] = Element 1
myArray[2] = Element 2
myArray[3] = Element 3
myArray[4] = Element 4
myArray[5] = Element 5
Подібні функції, процедури та команди
$RangeChecks — визначає, чи перевіряє Delphi межі масиву.
$Resource — визначає файл ресурсу, який буде включено до програми.
Array — тип даних, що містить індексовану колекцію даних.