2008-09-29 16 views

Respuesta

24

Utilice esta:

{$IFDEF DEBUG} 
... 
{$ENDIF} 
+0

Y asegúrese de que las opciones del proyecto definen DEBUG. Creo que solo las nuevas versiones de Delphi (D2007 y superiores?) Lo configuran de forma predeterminada para una compilación de depuración. –

+4

Para versiones anteriores, puede usar {$ IFOPT D +}. 'D' es el símbolo de opción del compilador para "Compilar con información de depuración".'D +' indica que lo que sigue solo debe compilarse si esa opción es * ON *. – Deltics

+1

Para la portabilidad de {$ IFDEF DEBUG} más legible, por supuesto, podría incluir algo como {$ IFOPT C +} {$ DEFINE DEBUG} {$ ENDIF} en un archivo de definición de inclusión estándar (en las secciones relacionadas con las versiones de Delphi que don 't autodefinir DEBUG para usted. Sin embargo, tenga en cuenta que esta "definición automática" no siempre es confiable. DEBUGINFO Creo que se define automáticamente, pero DEBUG solo se define si deja los condicionales predeterminados para la compilación DEBUG tal como están (incluye DEPURAR como una configuración de "fábrica", pero esto puede y puede ser eliminado. Es decir, no es una definición "incorporada" cuando se construye con Info de depuración. – Deltics

7

Aparte de lo lassevk dicho, también puede utilizar algunos otros métodos de compilador-evaluación (desde Delphi 6, creo):

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

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

{$IFDEF CONDITIONALEXPRESSIONS} 

Existen varios usos para esto.

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

Se puede utilizar en RTLVersion $ SI expresiones para probar el tiempo de ejecución biblioteca de nivel de versión independiente del nivel de versión del compilador.
Ejemplo: {$ SI RTLVersion> = 16.2} {... $ IfEnd}

Además, la versión del compilador en sí se puede comprobar, de nuevo a partir del código: se asigna

CompilerVersion un valor por compilador cuando la unidad del sistema es compilado. Indica el nivel de revisión 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 la definición condicional de VERxxx . Siempre pruebe para mayor o menor que un nivel de revisión conocido. No es buena idea probar para un nivel de revisión específico.

Otra cosa que hago con regularidad, es definir un símbolo cuando no está definido todavía (agradable para visión de compatibilidad), así:

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

Espero que esto ayude!

+0

Declared(), duh –

+0

@ user205376: Gracias por el ojo agudo, arreglé el error tipográfico. – PatrickvL

3

Estas directivas de control están disponibles:

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

y que pueden ser utilizados 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; 
+2

Olvidó {$ IFOPT}, que se puede usar para probar directamente la configuración del compilador. {$ IFOPT D +} // INFORMACIÓN DE DEPÓSITO EN {$ IFOPT C +} // ASERCIONES HABILITADAS etc. – Deltics

5

DebugHook se establece si una aplicación se ejecuta en 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