瑣碎的例子
{$DEFINE MyRuntimeCheck} // Comment out this directive when the check is no-longer required!
// You can also put MyRuntimeCheck in the project defines instead.
function MyRuntimeCheck: Boolean; {$IFNDEF MyRuntimeCheck} inline; {$ENDIF}
begin
result := TRUE;
{$IFDEF MyRuntimeCheck}
// .. the code for your check goes here
{$ENDIF}
end;
這個概念基本上是這樣的:
定義的符號用於開啟程式碼的使用。它還會停止明確內聯的程式碼,這意味著將斷點放入檢查例程更容易。
然而,這種結構的真正美妙之處在於你不再需要支票了。通過註釋 $ DEFINE (在它前面放置’//’),你不僅會刪除檢查程式碼,還會開啟例程的內聯,從而從你呼叫的所有位置中刪除任何開銷例程! 編譯器將完全刪除所有檢查痕跡(假設內聯本身設定為 On
或 Auto
,當然)。
上面的示例基本上類似於斷言的概念,你的第一行可以根據用途將結果設定為 TRUE 或 FALSE。
但是你現在也可以自由地使用這種構造方式來執行跟蹤日誌記錄,指標等等。例如:
procedure MyTrace(const what: string); {$IFNDEF MyTrace} inline; {$ENDIF}
begin
{$IFDEF MyTrace}
// .. the code for your trace-logging goes here
{$ENDIF}
end;
...
MyTrace('I was here'); // This code overhead will vanish if 'MyTrace' is not defined.
MyTrace( SomeString ); // So will this.