Delphi #IF(DEBUG)相当于?

时间:2008-09-29 06:34:49

标签: delphi compiler-directives

是否存在Delphi等效的C ##if(DEBUG)编译器指令?

4 个答案:

答案 0 :(得分:28)

使用此:

{$IFDEF DEBUG}
...
{$ENDIF}

答案 1 :(得分:8)

除了lassevk所说的,你还可以使用其他一些编译器评估方法(因为Delphi 6,我相信):

{$IF NOT DECLARED(SOME_SYMBOL)} 
  // Mind you : The NOT above is optional
{$ELSE}
{$IFEND}

要检查编译器是否具有此功能,请使用:

 {$IFDEF CONDITIONALEXPRESSIONS}

有几种用途。

例如,您可以检查RTL的版本;来自Delphi的帮助:

  

您可以在$ IF中使用RTLVersion   用于测试运行时的表达式   库版本级别独立   编译器版本级别   示例:{$ IF RTLVersion> = 16.2} ...   {$ IFEND}

此外,可以再次从代码中检查编译器版本本身:

  

CompilerVersion被赋值为   系统单元时的编译器   编译。它表示修订   编译器功能的级别/   语言语法,可能会提前   独立于RTLVersion。   CompilerVersion可以在$ IF中测试   表达式,应该使用   而不是测试VERxxx   条件定义。总是测试   大于或小于已知的   修订级别。这是一个坏主意   测试特定的修订级别。

我经常做的另一件事是定义一个尚未定义的符号(对于前向兼容性很好),如下所示:

 {$IF NOT DECLARED(UTF8String)}
 type
   UTF8String = type AnsiString;
 {$IFEND} 

希望这有帮助!

答案 2 :(得分:6)

如果应用程序在IDE调试器下运行,则设置DebugHook。与编译器指令不同但仍然非常有用。例如:

ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging

答案 3 :(得分:3)

这些控制指令可用:

{$IFDEF}
{$ELSE}
{$ENDIF}
{$IFNDEF} //if *not* defined

它们可以如下所示使用:

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  {$IFDEF MY_CONDITIONAL}
  ShowMessage('my conditional IS defined!');
  {$ELSE}
  ShowMessage('my conditional is NOT defined!');
  {$ENDIF}

  {$IFNDEF MY_CONDITIONAL}
  ShowMessage('My conditional is explicitly NOT defined');
  {$ENDIF}
end;