기본 패턴
cpp
switch (mode) {
case 0:
std::cout << "off\n";
break;
case 1: {
int level = 3;
std::cout << level << "\n";
break;
}
default:
std::cout << "unknown\n";
break;
}설명
switch는 하나의 정수 계열 값이나 enum 값을 여러 상수 경우로 나눌 때 적합한 분기 구조입니다.- C++에서도
break를 쓰지 않으면 다음 case로 이어지는 fallthrough가 일어나므로, 의도 여부를 항상 명확히 해야 합니다. case안에서 지역 변수를 선언할 때는 scope를 중괄호로 분리하는 편이 안전합니다. 그렇지 않으면 초기화를 건너뛴 점프 문제와 엮여 컴파일 오류나 혼란을 만들 수 있습니다.- 여러 case를 한 동작으로 묶을 때는 fallthrough를 의도적으로 활용할 수 있지만, 이때도 읽는 사람이 실수로 오해하지 않도록 구조를 분명히 하는 편이 좋습니다.
- enum class와 같이 쓰면 상태 분기가 더 읽기 쉬워지고, 잘못된 정수값 혼입도 줄어듭니다.
짧은 예제
cpp
#include <iostream>
enum class Command {
save,
load,
exit_program
};
int main() {
Command cmd = Command::load;
switch (cmd) {
case Command::save:
std::cout << "save\n";
break;
case Command::load:
std::cout << "load\n";
break;
case Command::exit_program:
std::cout << "exit\n";
break;
}
}빠른 정리
| 항목 | 설명 |
|---|---|
switch (expr) | 하나의 값을 기준으로 여러 분기 수행 |
case value: | 특정 상수 값일 때의 실행 지점 |
break | 현재 switch를 빠져나감 |
| fallthrough | break 없이 다음 case까지 이어짐 |
| case scope | 지역 변수 선언이 있으면 {}로 묶는 편이 안전 |
주의할 점
case 안에서 지역 변수를 선언했는데 중괄호로 scope를 묶지 않으면, 다른 case에서 그 선언 지점을 건너뛰는 흐름 때문에 코드가 의도보다 복잡해지고 오류가 나기 쉽습니다.