C 언어 switch 문
IT위키
더 많은 작업
- switch statement in C
- 정수 값 하나를 여러 case 와 견주어 일치하는 곳으로 분기하는 C 언어의 제어문
switch (식) {
case 상수1:
...
break;
case 상수2:
...
break;
default:
...
}
case 는 들어가는 지점일 뿐이고 빠져나오는 지점이 아니다. 일치하는 case 로 들어간 뒤에는 break 나 switch 의 끝을 만날 때까지 뒤따르는 case 와 default 의 문장을 모두 실행한다. 이것을 폴스루(fall-through)라고 한다.
int a = 11, b = 19;
switch (a) {
case 1: b += 1;
case 11: b += 2; // 여기로 들어간다. b = 21
default: b += 3; // break 가 없어 이어서 실행. b = 24
break;
}
printf("%d", a - b); // -13
- 일치하는 case 가 없으면 default 로 간다. default 도 없으면 아무것도 하지 않는다.
- default 는 위치와 상관없이 "일치하는 case 가 없을 때" 들어가는 곳이다. 위 코드처럼 앞 case 에서 흘러 내려와도 실행된다.
위 예제는 아래처럼 swap() 을 부른 뒤에 switch 를 도는 형태로 자주 나온다.
void swap() {
int a = 11; int b = 19;
int t = a; a = b; b = t; // swap 안의 a, b 만 바뀐다
}
swap() 의 a, b 는 그 함수의 지역 변수라 main() 의 a, b 와 이름만 같은 별개의 변수다.
함수가 끝나면 사라지므로 main() 의 a 는 그대로 11 이다. 바깥 변수를 바꾸려면 포인터를 넘겨야 한다
(swap(&a, &b)).
- switch 의 식은 정수형(char, short, int, long, enum)이어야 한다. 실수와 문자열은 쓸 수 없다.
- case 의 값은 컴파일할 때 정해지는 정수 상수여야 한다. 변수는 쓸 수 없다.
- 같은 값의 case 를 두 번 쓰면 컴파일 오류다.
- 여러 값에 같은 처리를 하려면 case 를 붙여 쓴다.
case 1: case 2: ... break;
| 언어 | 폴스루 | 비고 |
|---|---|---|
| C, C++ | 있다 | break 를 빠뜨리는 실수가 잦아 컴파일러가 경고를 낸다 |
| 자바 | 있다 | String·enum 도 쓸 수 있다. 자바 14부터 폴스루 없는 -> 형식이 있다
|
| 파이썬 | 해당 없음 | switch 가 없고 3.10 부터 match 문이 있다 |