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라고 부르며 "구멍 사이로 떨어지다"에서 유래한 말입니다).

최근 수정: 2018년 2월 8일, 목요일, 오후 2:10