프로그램을 분석중인데... 아래 컴파일 지시어에 대해서 이해가 안가서 그러는데.... 님들 제발 짬좀 내서 가르켜주세요. ^^
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;
조건부 컴파일지시자들입니다. 즉, 어떤 조건에 맞으면 컴파일하고 그렇지 않으면 컴파일하지 말라는 겁니다.
$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 ~ 하고 같은 맥락에서 이해하시면 쉬울겁니다...
^^ 항상 즐코하세요...