是否存在Delphi等效的C ##if(DEBUG)编译器指令?
答案 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;