Question

Existe-t-il un équivalent Delphi de la directive de compilation C # #if (DEBUG)?

Était-ce utile?

La solution

Utilisez ceci:

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

Autres conseils

Outre ce que lassevk a dit, vous pouvez également utiliser quelques méthodes d'évaluation du compilateur (depuis Delphi 6, je crois):

{$IF NOT DECLARED(SOME_SYMBOL)} 
  // Mind you : The NOT above is optional
{$ELSE}
{$IFEND}

Pour vérifier si le compilateur dispose de cette fonctionnalité, utilisez:

 {$IFDEF CONDITIONALEXPRESSIONS}

Il y a plusieurs utilisations à cela.

Par exemple, vous pouvez vérifier la version de la RTL; Dans l'aide de Delphi:

  

Vous pouvez utiliser RTLVersion dans $ IF   expressions pour tester le runtime   version de la bibliothèque indépendamment   du niveau de version du compilateur.
  Exemple: {$ IF RTLVersion > = 16.2} ...   {$ IFEND}

De plus, la version du compilateur elle-même peut être vérifiée, à nouveau à partir du code:

  

CompilerVersion se voit attribuer une valeur par   le compilateur lorsque l'unité centrale est   compilé. Il indique la révision   niveau des fonctionnalités du compilateur /   syntaxe de langage, ce qui peut avancer   indépendamment de RTLVersion.   CompilerVersion peut être testé dans $ IF   expressions et devrait être utilisé   au lieu de tester le VERxxx   définition conditionnelle. Toujours tester pour   supérieur ou inférieur à un connu   Niveau de révision. C'est une mauvaise idée de   test pour un niveau de révision spécifique.

Une autre chose que je fais régulièrement est de définir un symbole lorsqu'il n'est pas encore défini (ce qui est bien pour la compatibilité en aval), comme ceci:

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

J'espère que ça aide!

DebugHook est défini si une application est exécutée sous le débogueur IDE. Ce n'est pas la même chose qu'une directive de compilation, mais c'est quand même très utile. Par exemple:

ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging

Ces directives de contrôle sont disponibles:

{$IFDEF}
{$ELSE}
{$ENDIF}
{$IFNDEF} //if *not* defined

et ils peuvent être utilisés comme indiqué ici:

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top