La compilación condicional

4530 vistas

La compilación condicional es la compilación de una parte del código que se rige por unas condiciones. Estas condiciones están determnadas por una serie de {$IFDEF ... } ... {$ENDIF} apoyadas por identificadores declarados con {$DEFINE} o {$UNDEF}.

Los usos más comunes son los siguientes:

Ajuntar mensajes para la depuración o puesta a punto:



delphi
  1. {$DEFINE PUESTAAPUNTO}
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. var
  4.   i: Integer;
  5. begin
  6.   i := HacerCalculo;
  7.   {$IFDEF PUESTAAPUNTO}
  8.   { esta linea sólo se compilará en la puesta a punto }
  9.   ShowMessage(IntToStr(i));
  10.   {$ENDIF}
  11.   TratarCalculo(i);
  12. end;



Compilación dependiendo de la versión de Delphi. Hay identificadores predefinidos para cada versión de Delphi que permiten compilar para cada una de ellas.



delphi
  1. uses  Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls, AppEvnts,
  2.   {$IfDef VER130}
  3.   DsgnIntf; { Para Delphi 5 }
  4.   {$Else}
  5.   DesignEditors, DesignIntf; { Para Delphi 6 y 7 }
  6.   {$EndIf}



VER80 está predefinido para Delphi1
VER90 está predefinido para Delphi2
VER100 está predefinido para Delphi3
VER120 está predefinido para Delphi4
VER130 está predefinido para Delphi5
VER140 está predefinido para Delphi6
VER150 está predefinido para Delphi7

Compilación dependiendo del SO. Este ejemplo está extraido de la definición del tipo TSearchRec usado para el manejo de FindFirst/FindNext.



delphi
  1. TSearchRec = record
  2.     Time: Integer;
  3.     Size: Integer;
  4.     Attr: Integer;
  5.     Name: TFileName;
  6.     ExcludeAttr: Integer;
  7. {$IFDEF MSWINDOWS}
  8.     FindHandle: THandle  platform;
  9.     FindData: TWin32FindData  platform;
  10. {$ENDIF}
  11. {$IFDEF LINUX}
  12.     Mode: mode_t  platform;
  13.     FindHandle: Pointer  platform;
  14.     PathOnly: String  platform;
  15.     Pattern: String  platform;
  16. {$ENDIF}
  17.   end;