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만 실행됩니다. 그러므로 case를 break로 중단하지 않으면 그다음에 있는 case, default가 계속 실행됩니다(이런 상황을 fall through라고 부르며 "구멍 사이로 떨어지다"에서 유래한 말입니다).