是否有与 C# #if(DEBUG) 编译器指令等效的 Delphi?
boris callens
问问题
21451 次
4 回答
33
用这个:
{$IFDEF DEBUG}
...
{$ENDIF}
于 2008-09-29T06:38:19.687 回答
8
除了lassevk所说的之外,您还可以使用其他一些编译器评估方法(我相信从Delphi 6开始):
{$IF NOT DECLARED(SOME_SYMBOL)}
// Mind you : The NOT above is optional
{$ELSE}
{$IFEND}
要检查编译器是否具有此功能,请使用:
{$IFDEF CONDITIONALEXPRESSIONS}
这有几种用途。
例如,您可以检查 RTL 的版本;从德尔福帮助:
您可以在 $IF 表达式中使用 RTLVersion 来独立于编译器版本级别测试运行时库版本级别。
示例:{$IF RTLVersion >= 16.2} ... {$IFEND}
此外,可以再次从代码中检查编译器版本本身:
CompilerVersion 在编译系统单元时由编译器分配一个值。它指示编译器功能/语言语法的修订级别,可以独立于 RTLVersion 前进。CompilerVersion 可以在 $IF 表达式中进行测试,并且应该使用而不是测试 VERxxx 条件定义。始终测试大于或小于已知修订级别。测试特定的修订级别是个坏主意。
我经常做的另一件事是定义一个尚未定义的符号(对于前向兼容性很好),如下所示:
{$IF NOT DECLARED(UTF8String)}
type
UTF8String = type AnsiString;
{$IFEND}
希望这可以帮助!
于 2008-09-29T07:54:09.863 回答
8
如果应用程序在 IDE 调试器下运行,则设置 DebugHook。与编译器指令不同,但仍然非常有用。例如:
ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
于 2009-10-15T14:06:26.760 回答
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;
于 2008-09-30T13:36:34.617 回答