C의 switch에서 일치한 case 레이블로 제어가 이동한 뒤에는 break, return 같은 종료 동작을 만날 때까지 문장을 이어서 실행합니다. 따라서 case 2 끝에 break가 없으면 다음 레이블의 본문도 실행될 수 있습니다.
레이블 자체가 자동 종료하는 것은 아닙니다. 시험 코드에서는 시작 레이블을 찾고, 아래로 내려가며 종료문을 만날 때까지 출력이나 대입을 순서대로 기록하면 됩니다.
case는 진입점을 만들고 break는 switch를 빠져나옵니다
switch는 식의 값을 계산한 다음 일치하는 case 레이블로 제어를 이동합니다. break는 가장 가까운 반복문 또는 switch를 종료합니다. 이 예제에는 내부 반복문이 없으므로 switch를 벗어납니다. case는 코드 실행을 자동으로 멈추는 경계가 아닙니다. 의도적으로 다음 case의 문장까지 실행하는 설계를 fall-through라고 부르기도 합니다. 따라서 정답을 구할 때에는 선택된 레이블만 표시하는 데 그치지 말고, 실제 종료문까지 이어지는 제어 흐름을 따라야 합니다.
case 2에서 시작하면 아래 대입도 이어집니다
int n = 2;
int total = 0;
switch (n) {
case 1: total += 1; break;
case 2: total += 2;
case 3: total += 3;
default: total += 4;
}| 단계 | 제어 위치 | 누적 total |
|---|---|---|
| 1 | case 2 | 2 |
| 2 | case 3 | 5 |
| 3 | default | 9 |
| 4 | switch 끝 | 다음 문장으로 이동 |
n이 2이면 첫 실행은 case 2의 total += 2입니다. 그 아래 case 3은 새로운 조건 검사로 돌아가는 문장이 아니라 switch 본문 안의 다음 레이블입니다. case 2에 break가 없으므로 3과 4를 더해 최종 값은 9가 됩니다. case 2 뒤에 break를 넣으면 누적 값 2에서 switch를 벗어나므로 아래 두 대입은 실행되지 않습니다.
출력 문제를 네 단계로 풉니다
- switch 식의 값과 일치하는 case 레이블을 찾습니다.
- 선택된 레이블에 붙은 첫 문장부터 실행합니다.
- 각 출력·변수 변경을 순서대로 적고 다음 레이블도 통과하는지 확인합니다.
- break, return, goto 또는 블록 끝 등 제어를 바꾸는 지점에서 추적을 멈춥니다.
case가 이어진다는 이유만으로 오류라고 단정하지 않습니다
자주 하는 실수는 case 3을 만났을 때 다시 n == 3인지 검사한다고 보는 것입니다. 이미 진입한 switch의 실행은 조건 검색을 다시 시작하지 않습니다. 또 모든 fall-through를 버그라고만 판정해서도 안 됩니다. 여러 레이블을 한 처리로 모으거나 의도적으로 여러 동작을 이어 붙일 수 있습니다. 다만 교육용 추적에서는 주석이나 별도 설계 설명이 없는 누락된 break를 실제 동작으로 계산해야 합니다. 컴파일러의 경고 표시와 C 표준이 정의하는 실행 흐름은 서로 다른 근거입니다.
case 레이블은 특정 실행 위치를 표시할 뿐 조건을 매번 다시 검사하지 않습니다. 일치하는 case가 없고 default도 없으면 switch 본문은 건너뜁니다. default가 선택되면 그 아래 문장부터 실행합니다. break는 가장 가까운 반복문 또는 switch를 빠져나가므로, switch 안에 반복문이 함께 있으면 어느 블록을 벗어나는지 괄호와 문장 위치를 확인해야 합니다. 여러 레이블을 한 처리로 묶으려고 중간 case를 비워 두는 설계도 있습니다. 레이블 수를 실행 횟수로 세지 말고 실제 문장과 종료 지점을 따라가세요.
case 3에 break를 넣는다면 해당 대입을 실행한 뒤 switch를 벗어납니다. 그렇게 바꾼 예에서는 total이 5에서 멈추며 default는 실행되지 않습니다. default가 가장 아래에 있더라도 앞선 case에서 break가 없으면 그 위치까지 내려갈 수 있습니다. 반대로 case 2가 선택되지 않았는데 case 3이 일치하지 않는다면 default가 선택될 수 있습니다. 시작점과 종료점을 함께 표시하면 case 레이블을 조건문처럼 재검사하는 실수를 줄일 수 있습니다.
정답을 가리고 확인해 보세요
이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.
case 2에 break가 없이 case 3과 default로 이어질 때 total은 얼마가 되나요?
정답과 해설 확인
9입니다. case 2에서 2, case 3에서 3, default에서 4를 더합니다.선택된 case 2부터 case 3과 default의 대입까지 실행하고 switch 끝에 도달하므로 2+3+4=9입니다. 별도 변형으로 case 3의 대입 뒤에 break를 추가하면 total은 5가 되고 default 대입은 실행되지 않습니다.