'forward goto'에 해당되는 글 1건

  1. 2007.09.15 Foward goto와 Backward goto
Study - Programming/C/C++2007. 9. 15. 01:01

  프로그래밍 처음 배울때 goto쓰지 말라는 소리 많이 들었을 것이다. 그 이유는 goto는 강제적으로 움직이는 것이라 프로그램의 움직임이 자연스럽지 못하고 잘못하면 스파게티 코드를 만들기 쉽기 때문이다. 그리고 goto를 쓰지 않고도 충분히 코드를 짤 수 있고. (참고로 내 친구의 코드 중에 함수를 쓸줄 몰라서 goto를 100개 게 쓴 친구가 있었다.)

  만일 이런 식의 코드가 있다고 했을 때

for(i = 0 ; i < 10 ; i++)
   for(j = 0 ; j < 10 ; j++)
      if(j == 3) break;

  break가 걸리면 break는 안쪽 for문만 멈춘다. 그런데 이 코드에서 break의 목적이 모든 for문을 빠져 나가는 것이라면 어떻게 해야 할까? 여러가지 방법이 있겠지만 그 중의 하나가 forward goto이다. goto를 남용하는것은 매우 위험한 일이지만 이것은 backward goto를 썼을 때 많이 발생한다. 프로그램의 진행방식은 위에서 아래로의 흐름인데 이것을 backword goto로 끊으면 순서를 역행하는 것이라 위험하겠지만 그에 비해 forword goto는 안전한 편이다. 단 뒤처리는 잘해 줘야겠지. 그래도 goto가 속도가 빠른 면이 있어(함수 호출 같은 경우는 스택 왔다 갔다 해야 하고 그렇겠지만 goto는 그런건 없다.)  어떤 면에서 보면 낫다고도 볼수 있다. 그러나 이런 특수한 경우가 아니라면 그나마 추천하고 싶지는 않다. 위 코드같은 경우는 이렇게 수정할수도 있을 것이다.

for(i = 0 ; i < 10 ; i++)
{
   for(j = 0 ; j < 10 ; j++)
   {
      if(j == 3)
      {    
           Break = 1;
           break;
      }
    }
    if (break = 1) break;
}

  나름 신호 변수를 놔둬서 하는 것인데 안정성은 이게 나을수도 있겠지. 속도면을 추구한다면 goto, 아니라면 위 같은 코드도 괜찮을 것이다.

Posted by 머리