Delphi #IF(DEBUG) equivalent?

爱⌒轻易说出口 提交于 2019-12-03 11:27:56

问题


Is there a Delphi equivalent of the C# #if(DEBUG) compiler directive?


回答1:


Use this:

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



回答2:


Apart from what lassevk said, you can also use a few other methods of compiler-evaluation (since Delphi 6, I believe) :

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

To check if the compiler has this feature, use :

 {$IFDEF CONDITIONALEXPRESSIONS}

There are several uses for this.

For example, you could check the version of the RTL; From the Delphi help :

You can use RTLVersion in $IF expressions to test the runtime library version level independently of the compiler version level.
Example: {$IF RTLVersion >= 16.2} ... {$IFEND}

Also, the compiler version itself can be checked, again from the code:

CompilerVersion is assigned a value by the compiler when the system unit is compiled. It indicates the revision level of the compiler features / language syntax, which may advance independently of the RTLVersion. CompilerVersion can be tested in $IF expressions and should be used instead of testing for the VERxxx conditional define. Always test for greater than or less than a known revision level. It's a bad idea to test for a specific revision level.

Another thing I do regularly, is define a symbol when it's not defined yet (nice for forward-compatiblity), like this :

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

Hope this helps!




回答3:


DebugHook is set if an application is running under the IDE debugger. Not the same as a compiler directive but still pretty useful. For example:

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



回答4:


These control directives are available:

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

and they can be used as shown here:

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;


来源:https://stackoverflow.com/questions/147719/delphi-ifdebug-equivalent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!