是否有一个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?