매크로에서 {}로 묶어 줄 수 없나요?

ryutuna의 이미지

예를 들어서 설명 드리겠습니다.

#define TEST {printf("a"); printf("b");}
 
 
void main(){
 
   int i = 1;
 
   if(i)
     TEST;
   else
     printf("c");
}

와 같은 식으로 만들어 봤는데

아래의 else가 illegal else 에러가 떠 버리네요.

위의 if와 같이 묶이질 못하는 모양인데...

물론 단순 {}가 아닌 do{}while(0);로 묶으면 정상 동작한다는 것은 알고 있습니다만,

위와 같이하면 실제로 어떻게 되서 안 된다는 걸 알고 싶은겁니다.

{}가 있어도 제거 되서

if(i)
printf("a"); printf("b");
else
printf("c");

의 형태로 치환되는 걸까요?

익명 사용자의 이미지

void main(void)
{
   int i = 1;
 
   if(i)
       TEST
    else
        printf("c");
}
ryutuna의 이미지

감사합니다.

--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.

oosap의 이미지

이런 문제는 gcc 에서라면 옵션에 -save-temps 로 컴파일 중간파일들이 저장되도록 해서 컴파일 한 후 프리프로세스된 후의 파일(확장자 .i)을 확인해보면 쉽게 알 수 있습니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.