C 언어의 switch문은 하나의 변수를 여러 값 목록과 차례대로 비교하여 일치 여부를 판단하는 조건문입니다. 비교 대상이 되는 각각의 값을 케이스(case)라고 부르며, switch에 전달된 변수는 각 switch case와 순서대로 검사됩니다.
switch문 기본 문법
C 프로그래밍 언어에서 switch문의 기본적인 작성 형식은 다음과 같습니다.
switch(expression) {
case constant-expression :
statement(s);
break; /* 선택 사항 */
case constant-expression :
statement(s);
break; /* 선택 사항 */
/* case 문은 원하는 만큼 여러 개 사용 가능 */
default : /* 선택 사항 */
statement(s);
}switch문의 주요 규칙
switch문에서 사용되는 표현식(expression)은 반드시 정수형(integral type) 또는 열거형(enumerated type)이어야 합니다. 클래스 타입의 경우, 해당 클래스가 정수형이나 열거형으로 변환되는 단일 변환 함수를 가지고 있어야 합니다.
하나의 switch 안에는 원하는 만큼 많은 case 문을 포함할 수 있습니다. 각 case 뒤에는 비교할 값과 콜론(:)이 붙습니다.
각 case의 상수 표현식(constant-expression)은 switch에 사용된 변수와 동일한 데이터 타입이어야 하며, 상수 또는 리터럴 값이어야 합니다.
switch 대상 변수가 특정 case의 값과 일치하면, break 문을 만날 때까지 해당 case 이후의 모든 문장이 실행됩니다.
break 문에 도달하면 switch문이 즉시 종료되고, 프로그램의 제어 흐름은 switch문 바로 다음 줄로 이동합니다.
모든 case에 반드시 break가 있어야 하는 것은 아닙니다. 만약 break가 없다면, 제어 흐름은 break를 만날 때까지 그 아래의 후속 case들로 계속 넘어가게 됩니다. 이를 폴스루(fall-through)라고 합니다.
switch문에는 선택적으로 default case를 둘 수 있으며, 이는 반드시 switch문의 맨 끝에 위치해야 합니다. default case는 어떤 case도 일치하지 않을 때 특정 작업을 수행하는 데 사용되며, 별도의 break는 필요하지 않습니다.
예제 코드
아래 예제는 학점(grade) 문자에 따라 서로 다른 메시지를 출력하는 switch문의 실제 사용 방법을 보여줍니다.
#include <stdio.h>
int main () {
/* 지역 변수 선언 */
char grade = 'B';
switch(grade) {
case 'A' :
printf("Excellent!\n" );
break;
case 'B' :
case 'C' :
printf("Well done\n" );
break;
case 'D' :
printf("You passed\n" );
break;
case 'F' :
printf("Better try again\n" );
break;
default :
printf("Invalid grade\n" );
}
printf("Your grade is %c\n", grade );
return 0;
}실행 결과
Well done Your grade is B
위 예제에서 변수 grade의 값은 'B'이므로, case 'B'와 case 'C'가 함께 묶인 블록이 실행되어 "Well done"이 출력됩니다. 이처럼 여러 case를 하나로 묶으면 동일한 처리를 공유할 수 있어 코드가 더욱 간결해집니다.