德尔福#IF(DEBUG)相同呢?(Delphi #IF(DEBUG) equivalent?)

2019-08-16 20:04发布

是否有一个Delphi相当于C#的#如果(调试)编译器指令?

Answer 1:

用这个:

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


Answer 2:

除了什么lassevk说,你也可以使用编译器的评估(因为德尔福6,我相信)的其它几个方法:

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

要检查是否编译器有这个功能,使用方法:

 {$IFDEF CONDITIONALEXPRESSIONS}

有几种用途此。

例如,您可以检查RTL的版本; 从德尔福帮助:

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

此外,编译器版本本身就可以进行检查,再从代码:

CompilerVersion由编译器系统单元被编译时所分配的值。 它表示编译器的特征/语言的语法,其可以独立于RTLVersion的推进的修订级别。 CompilerVersion可以测试在$ IF表达式,应该用来代替测试的VERxxx有条件的定义。 始终测试大于或小于已知修订级别。 这是一个坏主意,以测试特定修订级别。

我经常做的另一件事,是定义时,它没有定义,但(尼斯前向兼容性),这样的符号:

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

希望这可以帮助!



Answer 3:

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

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


Answer 4:

这些控制指令可用:

{$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;


文章来源: Delphi #IF(DEBUG) equivalent?