매크로에서 {}로 묶어 줄 수 없나요?
글쓴이: ryutuna / 작성시간: 토, 2013/04/13 - 6:21오후
예를 들어서 설명 드리겠습니다.
#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");
의 형태로 치환되는 걸까요?
Forums:
void main(void){ int i =
아 끝에 세미콜론 문제였군요.
감사합니다.
--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.
이런 문제는 gcc 에서라면 옵션에
이런 문제는 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.
댓글 달기