25.2 case에서 break를 사용하지 않을 때의 동작 알아보기

지금까지 각 case마다 break를 붙여주었는데 break가 없으면 어떻게 될까요? 앞의 소스에서 break를 모두 삭제합니다.

switch_without_break1.c

#define _CRT_SECURE_NO_WARNINGS    // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>

int main()
{
    int num1;

    scanf("%d", &num1);    // 값을 입력받음

    // switch의 case에서 break 삭제
    switch (num1)
    {
    case 1:    // 1일 때는 아래 case 2, default가 모두 실행됨
        printf("1입니다.\n");
    case 2:    // 2일 때는 아래 default까지 실행됨
        printf("2입니다.\n");
    default:
        printf("default\n");
    }

    return 0;
}

다시 소스를 컴파일하여 실행한 뒤 1을 입력하고 엔터 키를 누르세요.

실행 결과

1 (입력)
1입니다.
2입니다.
default

case 1:만 실행될 줄 알았는데 case 2:, default:가 모두 실행되었습니다. 즉, case를 작성할 때는 마지막 부분에서 break로 중단해주어야 해당 case만 실행됩니다. 그러므로 casebreak로 중단하지 않으면 그다음에 있는 case, default가 계속 실행됩니다(이런 상황을 fall through라고 부르며 "구멍 사이로 떨어지다"에서 유래한 말입니다).