본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
switch statement in C
정수 값 하나를 여러 case 와 견주어 일치하는 곳으로 분기하는 C 언어의 제어문
   switch (식) {
       case 상수1:
           ...
           break;
       case 상수2:
           ...
           break;
       default:
           ...
   }

break 를 빼면 아래로 흐른다

편집 원본 편집

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 문이 있다