다음을 통해 공유


스위치 문 (c, + +)

선택할을 코드 정수 식의 값에 따라 여러 단면 들 수 있습니다.

switch ( expression )
   case constant-expression : statement
   [default  : statement]

설명

되는 명확한 변환을 정수 계열 형식에 클래스 형식 또는 정수 계열 형식 이어야 합니다.정수 계열 확장 수행에 설명 된 대로 정수 계열 홍보.

switch 본문의 일련의 구성 된 경우 레이블 및 선택적 기본 레이블.없음 두 상수 식에서 경우 문이 같은 값으로 계산할 수 있습니다.해당 기본 레이블 한 번만 나타날 수 있습니다.레이블된 문을 구문 요구 되지 않습니다 있지만 해당 switch 문을 수 없이 무의미 합니다.기본 문 끝에 상태가 필요지 않습니다. 이 switch 문의 본문에 아무 곳 이나 나타날 수 있습니다.또는 기본 레이블을 switch 문에 안에 나타날 수 있습니다.

상수 식경우 레이블 형식으로 변환 됩니다 와 비교 하 고 같은지.컨트롤의 문에 전달 경우상수 식 의 값과 일치 . 결과 동작에는 다음 표에 나와 있습니다.

스위치 문은 동작

조건

동작

변환 된 값 승격된 제어 식과 일치합니다.

해당 레이블 다음의 문으로 제어가 이동 합니다.

상수에 일치 하는 상수는 경우 레이블을 지정 합니다. 기본 레이블 표시 됩니다.

컨트롤에 전송 되는 기본 레이블.

상수에 일치 하는 상수는 경우 레이블을 지정 합니다. 기본 레이블 있을 수 없습니다.

다음에 오는 문으로 제어가 되는 switch 문의입니다.

일치 하는 식이 발견 되 면 컨트롤에서 후속 impeded입니다 경우 또는 기본 레이블.브레이크 문의 실행을 중지 하 고 다음에 오는 문으로 제어를 전달 하는 데 사용의 switch 문입니다.없이 브레이크 문 고에서 일치 하는 모든 문에 케이스 레이블 끝에 switch를 비롯 하 여는 기본, 실행 됩니다.예를 들면 다음과 같습니다.

// switch_statement1.cpp
#include <stdio.h>

int main() {
   char *buffer = "Any character stream";
   int capa, lettera, nota;
   char c;
   capa = lettera = nota = 0;

   while ( c = *buffer++ )   // Walks buffer until NULL
   {
      switch ( c )
      {
         case 'A':
            capa++;
            break;
         case 'a':
            lettera++;
            break;
         default:
            nota++;
      }
   }
   printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
      capa, lettera, (capa + lettera + nota) );
}

위의 예제에서 capa 증가 c 대문자입니다 A.break 문 다음 capa++ 의 실행을 종료는 switch 본문 및 제어를 전달 하는 while 루프.없이 break 문, lettera 및 nota 도 증가 합니다.유사한 목적으로 제공 되는 break 에 대 한 문을 case 'a'.경우 c 소문자입니다 a, lettera 증가 하는 break 문은 종료는 switch 본문입니다.경우 c 하지 않습니다는 a 또는 A, default 문이 실행 됩니다.

블록 내부를 switch 가 연결할 수 있는 한 문을 초기화가 정의 포함할 수 있습니다-실행 경로, 무시 합니다.이러한 선언을 사용 하 여 도입 된 이름은 로컬 범위가 있습니다.예를 들면 다음과 같습니다.

// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
   switch( tolower( *argv[1] ) )
   {
       // Error. Unreachable declaration.
       char szChEntered[] = "Character entered was: ";
   
   case 'a' :
       {
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";
       cout << szChEntered << "a\n";
       }
       break;
   
   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;
   
   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
}

A switch 문을 중첩 될 수 있습니다.이 경우 경우 또는 기본 레이블을 가장 가까운 연결 switch 를 둘러싸는 문.

Microsoft 전용

Microsoft C에서 case 값의 수를 제한 하지 않는 한 switch 문의입니다.사용 가능한 메모리에 의해서만 제한 됩니다.ANSI C 필요 최소한 257 case 레이블 수에 사용할 수 있는 switch 문.

Microsoft 확장을 사용 하는 Microsoft C의 기본이입니다.사용은 /Za 이러한 확장을 사용 하는 컴파일러 옵션입니다.

참고 항목

참조

선택 문 (C++)

C + + 키워드

문 경우에 레이블 사용