2009년 3월 2일 월요일

do(...}while(0)의 또다른 용도

[#define에서 do{...}while(0)을 사용하는 이유는?] 에서 소개한 이유 외에 do{...}while(0)이 유용하게 사용될 수 있는 경우가 있다. 바로 goto를 사용하지 않고 중첩된 조건문을 탈출하기 위해서 do{...}while(0)을 응용할 수 있다. (옳건 그르건 간에)많은 사람들이 goto를 사용하는 것을 금기시 하기 때문에 do{...}while(0)문은 goto를 써야만 하는 경우에 좋은 대안이 될 수 있다.

바로 예제를 보고 이해하자.

if(...)
{
  if(...)
  {
   ....
   goto ESCAPE;
  }
}
ESCAPE:


위코드는 아래와 같이 goto없이 작성이 가능하다.

do{
  if(...)
  {
    if(...)
    {
       ....
      break;
    }
  }
}while(0);