
goto
개요
goto는 프로그램의 실행 흐름을 지정된 레이블(label)로 무조건적으로 이동시키는 제어문입니다.
C++ 버전별 주요 키워드 도입 시기
- C99 이전 (C/C++):
goto는 C 언어 초기부터 존재했으며, C++에서도 처음부터 지원되었습니다.
내용 설명
goto를 사용하면 코드의 특정 위치로 점프할 수 있습니다. 주로 다중 중첩 루프를 한 번에 빠져나가거나, 복잡한 에러 처리 로직을 단순화할 때 제한적으로 사용됩니다. 하지만 goto는 코드의 흐름을 예측하기 어렵게 만들어 가독성과 유지보수성을 해칠 수 있으므로 사용을 지양하는 것이 좋습니다.
예제 코드
#include <iostream>
int main() {
std::cout << "--- goto to exit nested loops ---" << std::endl;
for (int i = 1; i <= 3; ++i) {
for (int j = 1; j <= 3; ++j) {
std::cout << "i = " << i << ", j = " << j << std::endl;
if (i == 2 && j == 2) {
goto end_loops;
}
}
}
end_loops:
std::cout << "\nLoops terminated by goto." << std::endl;
return 0;
}
실행 결과
--- goto to exit nested loops ---
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
Loops terminated by goto.
활용팁
goto는 코드의 구조를 복잡하게 만들 수 있어 "spaghetti code"를 유발할 수 있습니다. 대부분의 경우break,continue,return이나 함수 추출, 예외 처리 등으로 대체할 수 있습니다.goto를 사용해야만 하는 드문 상황(예: 깊은 중첩 루프 탈출)이 아니라면 사용하지 않는 것이 현대 프로그래밍의 모범 사례입니다.
'개발 > C++ (98,03,11,14,17,20,23)' 카테고리의 다른 글
| Before Classic C++ : continue (0) | 2025.10.24 |
|---|---|
| Before Classic C++ : break (1) | 2025.10.23 |
| Modern C++ : std::exception (98, 11) (0) | 2025.10.22 |
| Modern C++ : std::async (11) (1) | 2025.10.21 |
| Modern C++ : std::scoped_lock (17) (0) | 2025.10.20 |
| Modern C++ : std::shared_timed_mutex (14) (0) | 2025.10.19 |
| Modern C++ : std::mutex (11, 14, 17) (1) | 2025.10.18 |
| Modern C++ : std::thread (11) (0) | 2025.10.17 |