C제어 흐름

switch와 fallthrough

`switch`, `case`, `break`, `default`가 여러 분기를 깔끔하게 표현하는 방식을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

c
switch (menu) {
    case 1:
        printf("start\n");
        break;
    case 2:
        printf("settings\n");
        break;
    default:
        printf("unknown\n");
        break;
}

설명

  • switch는 하나의 정수식 값을 여러 상수 경우로 나눌 때 읽기 좋은 구조를 제공합니다.
  • case는 정수, 문자, enum 상수처럼 컴파일 시점에 확정되는 값이어야 합니다.
  • break가 없으면 다음 case로 그대로 흘러가는데, 이를 fallthrough라고 합니다.
  • fallthrough는 의도적으로 쓸 수도 있지만, 대부분은 실수로 발생하므로 명확한 이유가 있을 때만 남기는 편이 좋습니다.

짧은 예제

c
#include <stdio.h>

int main(void) {
    char grade = 'B';

    switch (grade) {
        case 'A':
        case 'B':
            printf("pass\n");
            break;
        case 'C':
            printf("review needed\n");
            break;
        default:
            printf("invalid grade\n");
            break;
    }
    return 0;
}

빠른 정리

항목설명
switch (expr)하나의 값을 여러 경우로 분기
case value:특정 상수 값에 대한 실행 지점
break현재 switch 블록을 빠져나감
default어느 case에도 맞지 않을 때 실행
fallthroughbreak 없이 다음 case로 이어짐

주의할 점

break를 빠뜨리면 의도하지 않은 case까지 연달아 실행될 수 있습니다. 특히 메뉴 처리나 상태 전환 코드에서 자주 생기는 실수입니다.