delphi compiler-directives

Delphi#IF(DEBUG) equivalente?



compiler-directives (4)

Utilizar esta:

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

¿Existe un equivalente Delphi de la directiva del compilador C # #if (DEBUG)?


Estas directivas de control están disponibles:

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

y se pueden usar como se muestra aquí:

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;


DebugHook se establece si una aplicación se ejecuta con el depurador IDE. No es lo mismo que una directiva de compilación, pero sigue siendo bastante útil. Por ejemplo:

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


Además de lo que dijo lassevk, también puedes usar algunos otros métodos de evaluación de compiladores (desde Delphi 6, creo):

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

Para verificar si el compilador tiene esta característica, use:

{$IFDEF CONDITIONALEXPRESSIONS}

Hay varios usos para esto.

Por ejemplo, puede verificar la versión de RTL; De la ayuda de Delphi:

Puede usar RTLVersion en expresiones $ IF para probar el nivel de versión de la biblioteca de tiempo de ejecución independientemente del nivel de versión del compilador.
Ejemplo: {$ IF RTLVersion> = 16.2} ... {$ IFEND}

Además, la versión del compilador puede verificarse, también desde el código:

El compilador asigna un valor a CompilerVersion cuando se compila la unidad del sistema. Indica el nivel de revisión de las características del compilador / sintaxis del lenguaje, que puede avanzar independientemente de la RTLVersion. CompilerVersion se puede probar en expresiones $ IF y se debe usar en lugar de probar para la definición condicional de VERxxx. Siempre realice una prueba para un nivel de revisión mayor o menor que el conocido. Es una mala idea probar un nivel de revisión específico.

Otra cosa que hago regularmente es definir un símbolo cuando aún no está definido (bueno para la compatibilidad con versiones anteriores), como este:

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

¡Espero que esto ayude!