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

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

17 голосов
/ 29 сентября 2008

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

Ответы [ 4 ]

28 голосов
/ 29 сентября 2008

Используйте это:

{$IFDEF DEBUG}
...
{$ENDIF}
8 голосов
/ 29 сентября 2008

Помимо сказанного 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 присваивается значение компилятор, когда системный блок скомпилирован. Это указывает на ревизию уровень возможностей компилятора / синтаксис языка, который может продвигать независимо от версии RTL. CompilerVersion может быть протестирован в $ IF выражения и должны быть использованы вместо тестирования на VERxxx условное определение. Всегда проверяйте на больше или меньше известного уровень ревизии. Это плохая идея тест для определенного уровня ревизии.

Еще одна вещь, которую я регулярно делаю, это определение символа, когда он еще не определен (хорошо для прямой совместимости), например:

 {$IF NOT DECLARED(UTF8String)}
 type
   UTF8String = type AnsiString;
 {$IFEND} 

Надеюсь, это поможет!

6 голосов
/ 15 октября 2009

DebugHook устанавливается, если приложение работает под отладчиком IDE. Не то же самое, что директива компилятора, но все же довольно полезно. Например:

ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
3 голосов
/ 30 сентября 2008

Доступны следующие директивы управления:

{$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;
...