琐碎的例子

{$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 (在它前面放置’//’),你不仅会删除检查代码,还会打开例程的内联,从而从你调用的所有位置中删除任何开销例程! 编译器将完全删除所有检查痕迹(假设内联本身设置为 OnAuto,当然)。

上面的示例基本上类似于断言的概念,你的第一行可以根据用途将结果设置为 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.