Équivalent Delphi #IF (DEBUG)?
-
02-07-2019 - |
Question
Existe-t-il un équivalent Delphi de la directive de compilation C # #if (DEBUG)?
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;