goto 문

goto 사용 제한

레이블로 직접 이동하는 기능은 강력하지만 조건문과 반복문이 제공하는 구조적 흐름을 깨뜨릴 수 있습니다.

레이블

이동할 위치에 이름을 붙임

label: 형태로 점프 대상 위치를 표시합니다.

cleanup:
점프

현재 흐름을 건너뜀

goto label은 중간 코드를 뛰어넘어 지정한 레이블로 이동합니다.

goto cleanup
위험

실행 경로가 흩어짐

값 초기화와 자원 해제가 어느 경로에서 일어나는지 추적하기 어려워집니다.

숨은 경로
대안

구조적 제어 우선

함수 분리, 조기 반환, RAII, 예외 처리가 대부분의 점프 요구를 대신합니다.

return / RAII
읽기 비용위에서 아래로 흐름이 읽히지 않는다면 goto가 유지보수 비용을 키우고 있는 것입니다.
초기화변수 초기화를 뛰어넘는 점프는 C++에서 특히 문제가 될 수 있습니다.
정리 코드자원 관리는 goto보다 소멸자와 스마트 포인터로 맡기는 방향이 안전합니다.