Поиск…


Вступление

Это показывает, как обычная процедура проверки выполнения во время вашего собственного создания может быть легко включена, чтобы она не генерировала накладные расходы кода при ее отключении.

Тривиальный пример

{$DEFINE MyRuntimeCheck} // Comment out this directive when the check is no-longer required!
                         // You can also put MyRuntimeCheck in the project defines instead.

   function MyRuntimeCheck: Boolean;  {$IFNDEF MyRuntimeCheck} inline;  {$ENDIF}
   begin
      result := TRUE;
      {$IFDEF MyRuntimeCheck}
        // .. the code for your check goes here
      {$ENDIF}
   end;

Концепция в основном такова:

Определенный символ используется для включения кода. Он также останавливает код в явном виде, что означает, что проще поставить точку останова в процедуру проверки.

Однако настоящая красота этой конструкции заключается в том, что вы больше не хотите проверки. Комментируя $ DEFINE (поместите '//' перед ним), вы не только удалите контрольный код, но также включите встроенную подпрограмму и, таким образом, удалите все накладные расходы со всех мест, где вы вызывали рутина! Компилятор полностью удалит все следы вашего чека (при условии, что для самой встраивания установлено значение «Вкл.» Или «Авто», конечно).

Приведенный выше пример по существу похож на понятие «утверждения», и ваша первая строка может установить результат в TRUE или FALSE в зависимости от использования.

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

   procedure MyTrace(const what: string);  {$IFNDEF MyTrace} inline;  {$ENDIF}
   begin
      {$IFDEF MyTrace}
        // .. the code for your trace-logging goes here
      {$ENDIF}
   end;
...
MyTrace('I was here');   // This code overhead will vanish if 'MyTrace' is not defined.
MyTrace( SomeString );   // So will this.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow