2014년 10월 26일 일요일

do{}while(0)를 하는 이유(Devpia 조경민님 글)

원본글 주소 : http://devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=7936&page=1

리눅스 코드 보면 do while(0)코드가 많던데, 매크로 확장시 잘못된 scope 계산이되는것을 방지하기 위해서입니다.
첨언으로 아래 예에서 첫번째 매크로는 else에 에러가 나고, 두번째매크로는 FOO; 의 세미콜론이 문제가 됩니다.

===================================================
#define FOO  a = 1; printf("aa");
#define FOO  {a = 1; printf("aa");}
if( xx )
 FOO;
else
 a =2;
이런 경우 때문에 아래처럼 하는게 낫다.
#define FOO  do { a = 1; printf("aa"); }while(0)

댓글 없음: