Buscar..


Introducción

Esto muestra cómo una rutina de verificación de errores de tiempo de ejecución de su propia creación se puede incorporar fácilmente para que no genere ninguna sobrecarga de código cuando se apaga.

Ejemplo trivial

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

El concepto es básicamente este:

El símbolo definido se utiliza para activar el uso del código. También evita que el código esté explícitamente en línea, lo que significa que es más fácil poner un punto de interrupción en la rutina de verificación.

Sin embargo, la verdadera belleza de esta construcción es cuando ya no quieres el cheque. Comentando la $ DEFINE (poner '//' en frente de ella) que no sólo va a eliminar el código de verificación, sino que también se encienda la línea de la rutina y por lo tanto eliminar cualquier gasto general de todos los lugares donde se invoca ¡la rutina! El compilador eliminará todos los rastros de su cheque por completo (asumiendo que la alineación en sí misma está configurada en "On" o "Auto", por supuesto).

El ejemplo anterior es esencialmente similar al concepto de "aserciones", y su primera línea podría establecer el resultado en VERDADERO o FALSO según sea apropiado para el uso.

Pero ahora también es libre de utilizar esta forma de construcción para el código que realiza el registro de seguimiento, las métricas, lo que sea. Por ejemplo:

   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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow