- Mastering Delphi Programming:A Complete Reference Guide
- Primo? Gabrijel?i?
- 347字
- 2021-06-24 12:33:35
Range checking
The last compiler option I want to discuss, Range checking, tells the compiler whether to check indexes to arrays and strings. In other words, it will check if in expression such as s[idx+1], idx+1 represents a valid index.
You can turn range checking on and off with compiler directives {$RANGECHECKS ON} and {RANGECHECKS OFF} (or {$R+} and {$R-}).
Let's take a look at an example. In the method shown here, the second for loop accesses element arr[101] without any error, although the maximum array element is arr[100]. The third for loop, however, will raise an ERangeCheck exception when accessing arr[101]:
procedure TfrmCompilerOptions.btnRangeErrorClick(Sender: TObject);
var
arr: array [1..100] of Integer;
i: Integer;
begin
for i := Low(arr) to High(arr) do
arr[i] := i;
{$R-}
for i := Low(arr) to High(arr) do
arr[i] := arr[i] + arr[i+1];
{$R+}
for i := Low(arr) to High(arr) do
arr[i] := arr[i] + arr[i+1];
end;
This kind of checking is so important that I always leave it in my code, even in the release version. Accessing a nonexistent array or string element may not seem so dangerous, but what if you are writing into that element? If this is not caught, your code just overwrites some other data with nonsense values. This leads to extremely hard to find problems! By default, range checking is turned off even in debug build and you really should turn it on in every program.
What about the "cost" of this checking? As the CompilerOptions program shows, it can be significant. In this example, turning range checking on slows down the code by a whole 50%:

In such cases, turning range checking off can speed up the program. I would still recommend that you do that just for critical parts of code, not for the whole program.
This brings us to the end of this very long, but necessary, section as understanding the
developer tools is always a good thing. Let us now—finally!—switch to something more interesting, to real programming.
- 新媒體跨界交互設計
- 24小時學會電腦組裝與維護
- 筆記本電腦使用、維護與故障排除實戰
- 圖解西門子S7-200系列PLC入門
- Augmented Reality with Kinect
- Camtasia Studio 8:Advanced Editing and Publishing Techniques
- 分布式微服務架構:原理與實戰
- 基于Apache Kylin構建大數據分析平臺
- SiFive 經典RISC-V FE310微控制器原理與實踐
- Machine Learning Solutions
- FL Studio Cookbook
- 嵌入式系統原理及應用:基于ARM Cortex-M4體系結構
- Building Machine Learning Systems with Python
- 可編程邏輯器件項目開發設計
- Blender for Video Production Quick Start Guide