스위치 문 (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 이러한 확장을 사용 하는 컴파일러 옵션입니다.