Delphi #IF(DEBUG) эквивалент?
Существует ли Delphi-эквивалент директивы компилятора C# #if(DEBUG)?
4 ответа
DebugHook устанавливается, если приложение выполняется под отладчиком IDE. Не то же самое, что директива компилятора, но все еще довольно полезно. Например:
ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
Помимо сказанного lassevk, вы также можете использовать несколько других методов оценки компилятора (начиная с Delphi 6, я считаю):
{$IF NOT DECLARED(SOME_SYMBOL)}
// Mind you : The NOT above is optional
{$ELSE}
{$IFEND}
Чтобы проверить, имеет ли компилятор эту функцию, используйте:
{$IFDEF CONDITIONALEXPRESSIONS}
Для этого есть несколько применений.
Например, вы можете проверить версию RTL; Из справки Delphi:
Вы можете использовать RTLVersion в выражениях $IF для проверки уровня версии библиотеки времени выполнения независимо от уровня версии компилятора.
Пример: {$IF RTLVersion >= 16.2} ... {$IFEND}
Также, сама версия компилятора может быть проверена, опять же из кода:
CompilerVersion присваивает значение компилятором при компиляции системного блока. Это указывает на уровень редакции возможностей компилятора / синтаксиса языка, который может продвигаться независимо от RTLVersion. CompilerVersion может быть протестирован в выражениях $IF и должен использоваться вместо тестирования для условного определения VERxxx. Всегда проверяйте уровень выше или ниже известного уровня редакции. Это плохая идея, чтобы проверить для определенного уровня ревизии.
Еще одна вещь, которую я регулярно делаю, это определение символа, когда он еще не определен (хорошо для прямой совместимости), например так:
{$IF NOT DECLARED(UTF8String)}
type
UTF8String = type AnsiString;
{$IFEND}
Надеюсь это поможет!
Эти управляющие директивы доступны:
{$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;