모든 답변과 더 많은 연구를 읽은 후에 몇 가지를 얻습니다.
Case statements are only 'labels'
C에서는 사양에 따라
§6.8.1 표시 문 :
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
C에는 "labeled declaration"을 허용하는 절이 없습니다. 그것은 언어의 일부가 아닙니다.
그래서
case 1: int x=10;
printf(" x is %d",x);
break;
이 컴파일되지 않습니다 참조 http://codepad.org/YiyLQTYw을 . GCC에서 오류가 발생했습니다 :
label can only be a part of statement and declaration is not a statement
조차
case 1: int x;
x=10;
printf(" x is %d",x);
break;
이것도 컴파일되지 않습니다 . http://codepad.org/BXnRD3bu를 참조 하십시오 . 여기에도 같은 오류가 발생합니다.
C ++에서는 사양에 따라
label-declaration은 허용되지만 label-initialization은 허용되지 않습니다.
http://codepad.org/ZmQ0IyDG를 참조 하십시오 .
그러한 조건에 대한 해결책은 두 가지입니다
{}를 사용하여 새 범위를 사용하십시오.
case 1:
{
int x=10;
printf(" x is %d", x);
}
break;
또는 레이블이있는 더미 문을 사용하십시오.
case 1: ;
int x=10;
printf(" x is %d",x);
break;
switch () 전에 변수를 선언하고 요구 사항을 충족하는 경우 case 문에서 다른 값으로 초기화하십시오.
main()
{
int x; // Declare before
switch(a)
{
case 1: x=10;
break;
case 2: x=20;
break;
}
}
switch 문으로 더 많은 것들
레이블에 포함되지 않은 명령문은 스위치에 절대로 쓰지 마십시오.
switch(a)
{
printf("This will never print"); // This will never executed
case 1:
printf(" 1");
break;
default:
break;
}
http://codepad.org/PA1quYX3을 참조 하십시오 .