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