이 스레드에서 우리 goto
는 C 또는 C ++ 의 좋은 사용 예를 살펴 봅니다 . 사람들이 내가 농담이라고 생각했기 때문에 투표 한 답변 에서 영감을 얻었 습니다.
요약 (의도를 더 명확하게하기 위해 라벨이 원본에서 변경됨) :
infinite_loop:
// code goes here
goto infinite_loop;
대안보다 나은 이유 :
- 구체적입니다.
goto
무조건 분기를 일으키는 언어 구조입니다. 대안은 항상 참인 조건이 퇴화 된 조건부 분기를 지원하는 구조를 사용하는 것에 의존합니다. - 레이블은 추가 설명없이 의도를 문서화합니다.
- 독자는 초기
break
s를 위해 중간 코드를 스캔 할 필요가 없습니다 (비 원칙적인 해커가 초기 s로 시뮬레이션continue
하는 것은 여전히 가능합니다goto
).
규칙 :
- gotophobes가 이기지 않은 척하십시오. 위의 내용은 기존 관용구에 위배되기 때문에 실제 코드에서 사용할 수 없습니다.
- 우리 모두가 '유해하다고 생각한 Goto'에 대해 들어 봤고 goto를 사용하여 스파게티 코드를 작성할 수 있다는 것을 알고 있다고 가정합니다.
- 예에 동의하지 않는 경우 기술적 장점만으로 비판하십시오 ( '사람들이 고토를 좋아하지 않기 때문에'는 기술적 이유가 아닙니다).
우리가 어른처럼 이야기 할 수 있는지 봅시다.
편집하다
이 질문은 이제 끝난 것 같습니다. 고품질 답변을 생성했습니다. 모든 사람, 특히 내 작은 루프 예제를 진지하게 받아 들인 사람들에게 감사합니다. 대부분의 회의론자들은 블록 범위의 부족을 우려했습니다. @quinmars가 주석에서 지적했듯이 언제든지 루프 본문을 중괄호로 묶을 수 있습니다. 그 전달에주의 for(;;)
하고 while(true)
(애 태우게하는 버그를 일으킬 수 있으며이를 생략) 당신이 중 하나를 무료로 중괄호를 제공하지 않습니다. 어쨌든,이 사소한 일에 더 이상 당신의 두뇌 전력의 낭비하지 않습니다 - 나는 무해하고 관용적으로 살 수 for(;;)
및 while(true)
(단지뿐만 아니라 내가 내 일을 유지하려는 경우).
다른 응답을 고려할 때 많은 사람들 goto
이 항상 다른 방식으로 다시 작성해야하는 것으로 간주하는 것을 봅니다 . 물론 goto
루프, 추가 플래그, 중첩 된 if
s 스택 등을 도입 하여을 피할 수 있지만 goto
작업에 가장 적합한 도구 인지 고려하지 않는 이유 는 무엇입니까? 다시 말해, 의도 된 목적을 위해 내장 된 언어 기능을 사용하는 것을 피하기 위해 사람들이 얼마나 추악함을 견딜 준비가되어 있습니까? 내 생각은 깃발을 추가하는 것조차도 지불하기에는 너무 비싸다는 것입니다. 나는 내 변수가 문제 또는 솔루션 영역에서 사물을 나타내는 것을 좋아합니다. '오로지 피하기 위해 goto
'는 그것을 자르지 않습니다.
정리 블록으로 분기하기 위해 C 패턴을 부여한 첫 번째 답변을 수락합니다. IMO, 이것은 goto
게시 된 모든 답변 중 가장 강력한 경우를 만듭니다 .