C 언어계얼 소스코드를 보다보면 종종 아래와 같은 소스를 볼 수 있다.

#define M do {printf("hello");printf("world");} while(0)

 

처음에 이 코드를 보았을때에는 컴파일러가 무슨 장난을 치는구나 라고 생각했는데..

이유는 의외로 단순했다.

 

먼저 위와 같은 역할을 하도록 매크로를 짜보자.

 

<첫번째>

#define M printf("hello");printf("world")

이것은 아래와 같은 if 조건이 있을대 오류가 난다.

if (condition)
     M;
else
     printf("!!!");


<두번째>

그렇다면 중괄호로 묶으면 안될까?

#define M {printf("hello");printf("world");}

 

이것은 첫번째와 같은 조건식에 넣었을때 세미콜론 때문에 오류가 나겐된다.

 

if (condition)
    M
else
    printf("!!!");

이와 같이 쓴다면 문제 없이 돌아간다.

하지만 대부분의 프로그래머가 줄 맨 끝에 세미콜론을 쓰는것이 익숙하기 때문에 저런 방식은 오류를 유발할 확률이 높다.

 

그래서 결국 위와같이 do while(0) 을 사용하게 되는것이다.

원문 : http://guntn.blog.me/100045877821

 

 

 

 

by cranix 2010. 12. 13. 18:39
| 1 |