CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): swhan (Nameless 1)
날 짜 (Date): 2004년 6월 15일 화요일 오전 12시 12분 09초
제 목(Title): Re: [Q] 매크로 문법중에 ____ 


위에 몇 번 나온 얘기인데.. 매크로를 함수처럼 이용하기 위해 2개 이상의 
명령을 주는 매크로의 code block을  1줄처럼 동작하도록 해줍니다.
   
#       define TRACE_RETURN(V)                  \                
                do { ____.setLine(__LINE__); return V; } while(0)
#       define TRACE_RETURN_VOID()              \      
                do { ____.setLine(__LINE__); } while(0)

{
blah blah blah;
if( ? ) 
TRACE_RETURN(0);
else
TRACE_RETURN_VOID();
}
==>
{
blah blah blah;
if( ?) 
do { ____.setLine(줄번호); return 0;} while(0); 
else
do { ____.setline(줄번호);} while(0);
}

만약 
#       define TRACE_RETURN(V)                  \
               { ____.setLine(__LINE__); return V; }
이라면 

if( ?) 
{ ____.setLine(줄번호); return 0;};
else
{ ____.setLine(줄번호);};
}

else에서 compile error가 뜨게 됩니다. 

저라면... MACRO를 모두 do while로 묶느니... if와 else사이를 무조건 {}로 
묶는 코딩습관을 들이겠습니다. 
뭐 이미 저런식으로 작성된 코드 갖다 쓰려면 어쩔 수 없는 경우도 있긴합니다. 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.