Delphi #IF(DEBUG) эквивалент?

Существует ли Delphi-эквивалент директивы компилятора C# #if(DEBUG)?

4 ответа

Решение

Использовать этот:

{$IFDEF DEBUG}
...
{$ENDIF}

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;
Другие вопросы по тегам