do while(0) MACRO

#define MACRO do { printf(“first”); printf(“second”); } while(0)

소스코드를 보다 보면,  위와  같은 소스코드를 볼 수 있습니다.

조건문 if … else … 문에서

중괄호를 사용하지 않는 분들이 위의 매크로를 사용하지 않고,

#define MACRO printf(“first”); printf(“second”);

이렇게 정의된 매크로를 사용한다면,

if( 조건 )

MACRO;

else

printf(“third”);

위와같은 소스코드를 실행할 때, else에서 문법 에러가 납니다.

(illegal else without matching if 에러가 나지요…)

한 문장인것 처럼 중괄호로 묶어주면 되려나?

하고서 아래와 같이 매크로를 정의하면

#define MACRO { printf(“first”); printf(“second”); }

MACRO 뒤의 세미콜론이 문제가 되어 역시 else에서 문법 에러가 나지요…

(역시 같은 illegal else without matching if 에러가 납니다.)

그래서

#define MACRO do { printf(“first”); printf(“second”); } while(0) 식의

do while(0) 매크로를 쓴다고 하네요^^

한 번은 실행되면서, 영역도 구성이 되고, 매크로 상수 뒤의 세미콜론까지 처리할 수 있는

좋은 방법이니까요^^

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

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s