#define을 사용한 매크로 함수에서 do{...}while(0) 문을 사용하는 경우를 볼 수 있다. 왜 굳이 의미없는 do{...}while(0)를 사용하는지 아래 예제를 보면서 살펴보자.
//do{...}while(0)문을 사용하지 않은 경우
#define Inc2Each(x,y) { x+=2;y+=2;}
//do{...}while(0)문을 사용한 경우
#define Inc2Each(x,y) do{ x+=2;y+=2}while(0)
do{...}while(0)을 사용하지 않은 첫번째 방식의 경우 어떤 문제가 사용하는지 살펴보자
if ( x > y )
Inc2Each(x,y);
else
x=y;
위 코드는 아래와 같이 확장될 것이다.
if ( x > y )
{ x+=2;y+=2;};
else
x=y;
즉 if 와 else 사이에 원치 않는 ; 가 포함됨으로써 예상치 못했던 오류를 만들어 내게 된다.
하지만 do{...}while(0)을 사용하면 아래와 같이 문제가 깨끗하게 해결된다.
if ( x > y )
do{ x+=2;y+=2;}while(0);
else
x=y;
혹시 아직도 뭐가 문제인지 모르겠다면...
if ( x > y )
{
x+=2;
y+=2;
} //if 문은 여기서 끝난다.
; //빈 라인이 되고...
else //이 else는 if문이 없는 else가 되므로 컴파일 에러 발생할 것임.
x=y;
출처 : http://kernelnewbies.org/FAQ/DoWhile0
'QnA' 카테고리의 다른 글
[Q/A] 데이터 타입이 바뀌면 일일이 다시 짜야하는건가요? (0) | 2010.02.27 |
---|---|
[Q/A] container_of() 매크로 (0) | 2010.02.27 |
[Q/A], P, NP, NP-hard, NP-complete? (0) | 2009.11.04 |
에르고딕 이론이란 무엇인가 (0) | 2009.09.19 |
[Q/A] epoll 과 rts(real time signal) 중 어느게 더 효율적? (0) | 2009.09.16 |
WRITTEN BY
- RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.
,