Delphi #IF (DEBUG) equivalente?
-
02-07-2019 - |
Domanda
Esiste un equivalente Delphi della direttiva del compilatore C # #if (DEBUG)?
Soluzione
Usa questo:
{$IFDEF DEBUG}
...
{$ENDIF}
Altri suggerimenti
A parte ciò che ha detto lassevk, puoi anche usare alcuni altri metodi di valutazione del compilatore (da Delphi 6, credo):
{$IF NOT DECLARED(SOME_SYMBOL)}
// Mind you : The NOT above is optional
{$ELSE}
{$IFEND}
Per verificare se il compilatore ha questa funzione, utilizzare:
{$IFDEF CONDITIONALEXPRESSIONS}
Ci sono diversi usi per questo.
Ad esempio, è possibile verificare la versione di RTL; Dall'aiuto di Delphi:
Puoi usare RTLVersion in $ IF espressioni per testare il runtime livello di versione della libreria in modo indipendente del livello di versione del compilatore.
Esempio: {$ IF RTLVersion > = 16.2} ... {$ IfEnd}
Inoltre, la stessa versione del compilatore può essere controllata, sempre dal codice:
CompilerVersion è assegnato un valore da il compilatore quando l'unità di sistema è compilato. Indica la revisione livello delle funzionalità del compilatore / sintassi del linguaggio, che può avanzare indipendentemente dalla versione RTL. CompilerVersion può essere testato in $ IF espressioni e dovrebbero essere usate invece di testare per VERxxx condizionale definire. Testare sempre per maggiore o minore di un noto livello di revisione. È una cattiva idea test per un livello di revisione specifico.
Un'altra cosa che faccio regolarmente, è definire un simbolo quando non è ancora definito (utile per la compatibilità diretta), come questo:
{$IF NOT DECLARED(UTF8String)}
type
UTF8String = type AnsiString;
{$IFEND}
Spero che questo aiuti!
DebugHook è impostato se un'applicazione è in esecuzione con il debugger IDE. Non è la stessa di una direttiva del compilatore ma è comunque abbastanza utile. Ad esempio:
ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
Queste direttive di controllo sono disponibili:
{$IFDEF}
{$ELSE}
{$ENDIF}
{$IFNDEF} //if *not* defined
e possono essere utilizzati come mostrato qui:
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;