Q&A

  • 컴파일 지시어대해서... 좀 가르켜 주세요...
프로그램을 분석중인데... 아래 컴파일 지시어에 대해서 이해가 안가서 그러는데.... 님들 제발 짬좀 내서 가르켜주세요. ^^


unit Unit1;
interface
{$DEFINE DEBUG}
{$DEFINE SheriffOn}
{$DEFINE SCM_Dynamic}

implementation

{$R *.DFM}
uses {$IFDEF 0}{$IFDEF SheriffOn}, uSCMLib {$ENDIF}{$ENDIF};

procedure TfIGW.FormCreate(Sender: TObject);
begin
{$IFDEF 0}
    I.Sheriff.DLL  := ReadString('Sheriff','DLL','.SCM.dll');
{$ENDIF}

{$IFDEF 0}
  {$IFDEF SheriffOn}
    {$IFDEF SCM_Dynamic}
    if FileExists(I.Sheriff.DLL) then
      I.Sheriff.Load := LoadSCM(I.Sheriff.DLL);
    {$ENDIF}
  {$ENDIF}
    if I.Sheriff.Load then
      lblSCM.Caption := 'SCM Load!'
    else
      lblSCM.Caption := 'SCM Fail!';
{$ENDIF}
end;

procedure TfIGW.FormDestroy(Sender: TObject);
begin
{$IFDEF 0}
  {$IFDEF SheriffOn}
    {$IFDEF SCM_Dynamic}
    if I.Sheriff.Load then
      FreeSCM;
    {$ENDIF}
  {$ENDIF}
{$ENDIF}
end;

procedure TfIGW.TimerMainTimer(Sender: TObject);
begin
  {$IFDEF DEBUG}
  if not Q.IsPause then
  begin
    IGW_QuLogEnd;
    I.QueueLog.sFile := IGW_QuLogStart;
    IGW_QuLogWrite(format('%s,[%s]',['M',' 날짜가 바뀌었어요. ']));
  end;
  {$ENDIF}
end;
1  COMMENTS
  • Profile
    최용일 2002.09.23 19:43
    안녕하세요. 최용일입니다.

    조건부 컴파일지시자들입니다. 즉, 어떤 조건에 맞으면 컴파일하고 그렇지 않으면 컴파일하지 말라는 겁니다.

    $DEFINE 이 지시자는 어떤 조건을 설정하는 지시자입니다. 반대되는것은 $UNDEF이구요.
    $IFDEF 이건 어떤 조건이 만족되는가를 판단하는 지시자입니다. 델파이의 if하고 같은 용도로 쓰이구요. $IFNDEF는 설명안해도 아시겠죠. 불만족되는 조건을 판단할때 쓰입니다.
    $ENDIF 는 위의 $IFDEF를 마친다는 뜻입니다. 델파이에서 블럭의 끝을 나타내는 end와 같죠...
    $ELSEIF를 써서 델파이의 if ~ else같은 형식으로 사용할 수도 있습니다.

    {$DEFINE DEBUG}
    procedure TfIGW.TimerMainTimer(Sender: TObject);
    begin
        {$IFDEF DEBUG}
        if not Q.IsPause then
        begin
            IGW_QuLogEnd;
            I.QueueLog.sFile := IGW_QuLogStart;
            IGW_QuLogWrite(format('%s,[%s]',['M',' 날짜가 바뀌었어요. ']));
        end;
        {$ENDIF}
    end;

    위에 보시면 $DEFINE로 DEBUG한 조건부상수가 선언되어 있은까 $IFDEF이하의 문장들이 컴파일됩니다. $DEFINE DEBUG가 없었다면 컴파일할때 $IFDEF ~ $ENDIF사이의 문장은 컴파일되지 않습니다.

    델파이의 if ~ else ~ 하고 같은 맥락에서 이해하시면 쉬울겁니다...

    ^^ 항상 즐코하세요...