C나 C++에서 조건 분기를 처리할 때 자주 사용하는 switch-case 문은 특정 값과 일치하는 case를 찾아 실행 흐름을 분기합니다. 그런데 단순히 하나의 값만 비교하는 것이 아니라, 값의 범위(range)를 지정하여 여러 값을 한 번에 처리할 수도 있습니다.
이번 글에서는 switch-case 문에서 범위를 사용하는 방법과 실제 동작 결과를 살펴보겠습니다.
범위를 지정하는 기본 문법
case 문에서 범위를 지정하려면 아래와 같이 작성합니다.
case low ... high
작성 규칙은 다음과 같습니다.
case키워드 뒤에 범위의 최솟값(low)을 먼저 적습니다.- 한 칸 띄운 후 마침표 세 개(...)를 입력합니다.
- 다시 한 칸 띄우고 범위의 최댓값(high)을 적습니다.
예를 들어 case 1 ... 10:이라고 작성하면, 1부터 10 사이의 모든 정수가 이 case에 해당됩니다.
범위 기반 switch-case 예제
다음 프로그램은 배열에 저장된 각 숫자가 어느 범위에 속하는지 판별하여 출력합니다.
코드
#include <stdio.h>
main() {
int data[10] = { 5, 4, 10, 25, 60, 47, 23, 80, 14, 11};
int i;
for(i = 0; i < 10; i++) {
switch (data[i]) {
case 1 ... 10:
printf("%d in range 1 to 10\n", data[i]);
break;
case 11 ... 20:
printf("%d in range 11 to 20\n", data[i]);
break;
case 21 ... 30:
printf("%d in range 21 to 30\n", data[i]);
break;
case 31 ... 40:
printf("%d in range 31 to 40\n", data[i]);
break;
default:
printf("%d Exceeds the range\n", data[i]);
break;
}
}
}실행 결과
5 in range 1 to 10 4 in range 1 to 10 10 in range 1 to 10 25 in range 21 to 30 60 Exceeds the range 47 Exceeds the range 23 in range 21 to 30 80 Exceeds the range 14 in range 11 to 20 11 in range 11 to 20
동작 방식 설명
배열 data에는 10개의 정수가 저장되어 있으며, 반복문을 통해 각 요소를 하나씩 switch 문에 전달합니다.
- 5, 4, 10 → 1~10 범위에 속하므로 첫 번째 case가 실행됩니다.
- 14, 11 → 11~20 범위에 해당합니다.
- 25, 23 → 21~30 범위에 해당합니다.
- 60, 47, 80 → 어떤 case 범위에도 속하지 않으므로
default문이 실행되어 "범위 초과" 메시지를 출력합니다.
주의사항
case low ... high 형태의 범위 문법은 표준 C/C++ 문법이 아니라 GCC(및 Clang) 컴파일러가 제공하는 확장 기능입니다. 따라서 MSVC처럼 이 확장을 지원하지 않는 컴파일러에서는 컴파일 오류가 발생할 수 있으므로, 코드 이식성(portability)이 중요한 프로젝트라면 if-else if 구문으로 대체하는 것이 안전합니다. 또한 범위의 시작값과 끝값 사이에 공백을 반드시 넣어야 하며, 공백 없이 붙여 쓰면 가변 인자 매크로 등 다른 문법으로 해석될 수 있습니다.