일단 대부분의 경우 쓰지 말라고 가르치고,
아예 존재 자체를 안 가르치는 교재도 상당히 많으나,
실제로는 리눅스 커널에서도 상당히 많이 씀
어떤 상황에서 쓰느냐,
함수 내에서 예외처리할 때 조건 통과를 못하는 모든 경우에 대해서
같은 에러 코드를 띄우고 비정상 종료 처리를 똑같이 해야될 때 코드 재사용을 하기 위해서 사용한다.
T func(...args...)
{
if(...)
{
if(...)
else
goto error;
}
else
goto error;
error:
printf("error in func!");
return -1;
}
이런 식으로
2중 포문 탈출하는건 다들 알테니 그렇다 치고,
결론으로 말하자면, 얼마전에 본 책에서 정리를 잘 해준 것 같은데
SAMS Teach Yourself C++ for Linux in 21 Days, Jesse Liberty, David B. Horvath, p183
"To avoid the use of goto, more sophisticated, tightly controlled looping commands have been introduced:
for, while, and do...while. Using these commands makes programs that are more easily understood, and
goto is generally avoided, but one might argue that THE CASE HAS BEEN A BIT OVERSTATED. Like any
too carefully used and in the right hands, goto can be a useful construct, and thd ANSI committee decided
to keep it in the language because it has its legitimate uses. But as they say, "Kids, don't try this at home!"."
C++에서도 도입이 된 것을 보면 확실히 goto는 존재 이유가 분명하다는 것
다만, 왜 언제 어떻게 쓰는지 알기 전에는 쓰지 말라는 것
교수님이 정말 goto없으면 완성안될정도에 쓰고 왠만하면 쓰지말라던데.. 안이뻐보인다고 코드가
ㄴ LINUX 커널은 모두가 이상적인 아름다움으로 인정하는 코드니까, 리눅스 커널에서 쓰는 형태로 라면 써도 되는거임. 근데 goto를 지양하는 이유에는 저번에 누가 말한 스택 메모리 문제도 있지만 첫째로는 가독성 문제임 ㅇㅇ
유지보수에 허덕이는 응용레벨 어플리케이션에서는 코드가 수시로 바뀌므로 절대봉인해야하는게 맞음
아직족밥//왠만->웬만 (왠지 빼고 웬임) [리듬 맞춤법 봇♬]
ㄴ 예외처리는 상관 없을 것 같은데 오히려 쓰는게 떠 편하지 않을까
크리티컬한 에러일때는 예외를 던지는 함수를 만들어야 콜스택을 보기가 편하지. 프로그램은 어차피 죽는거니까 구지 goto를 쓸이유가없음
그렇지않을경우에 예외처리하고 원래 진행하던 프로세스로 복귀해야하는데 goto를 쓰면 원래 흐름으로 돌아오기가 힘들지.. 내생각은 구지 쓸필요는 없을것같다
그건 커널 한정이고 탈출하려면 setjmp longjmp 써야지 - dc App
하긴 그게 정식 방법이긴 하져
뒤로만 날아가지 않으면 유용한 경우가 있음 유용하다는 예제들도 다 보면 앞으로만 날아감