Recherche…


Introduction

Cela montre comment une routine de vérification des erreurs d’exécution de votre propre fabrication peut être facilement incorporée afin de ne pas générer de surcharge de code lorsqu’elle est désactivée.

Exemple 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;

Le concept est essentiellement celui-ci:

Le symbole défini est utilisé pour activer l'utilisation du code. Cela empêche également le code d'être explicitement intégré, ce qui signifie qu'il est plus facile de placer un point d'arrêt dans la routine de vérification.

Cependant, la vraie beauté de cette construction est que vous ne voulez plus le chèque. En commentant le $ define (mettre « // » en face de celui - ci) , vous non seulement supprimer le code de vérification, mais vous pourrez aussi passer sur la ligne pour la routine et de supprimer ainsi les frais généraux de tous les endroits où vous avez appelé la routine! Le compilateur supprimera entièrement toutes les traces de votre vérification (en supposant que l'inclinaison proprement dite soit bien sûr définie sur "On" ou "Auto").

L'exemple ci-dessus est essentiellement similaire au concept des "assertions", et votre première ligne pourrait définir le résultat sur TRUE ou FALSE en fonction de l'utilisation.

Mais vous êtes maintenant également libre d'utiliser cette méthode de construction pour le code qui fait de la trace, de la métrique, etc. Par exemple:

   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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow