switch 문장에서case 문장에서 변수 초기화 문제!

#include<stdio.h>
int main()
{
 int i=1;
 switch(i)
 {
  case 1:
    int a=1;
    printf("%d/n",a);
  break;
  case 2:
    printf(" ");
  break;
  default:break;
 }
 return 0;
}

 
컴파일이 [error] D:/패키지/C-Free/Temp/이름이 지정되지 않았습니다. 1.cpp:11: error: jump to case label
[ERROR] D:/패키지/C-Free/Temp/이름 없음 1.cpp:8: error:   crosses initialization of `int a'
솔루션 1:
#include<stdio.h>
int main()
{
 int i=1;
 switch(i)
 {
  case 1:
  {
    int a=1;
    printf("%d/n",a);
  }
  break;
  case 2:
    printf(" ");
  break;
  default:break;
 }
 return 0;
}

시나리오 2:
#include<stdio.h>
void f();
int main()
{
 int i=1;
 switch(i)
 {
  case 1:
  f();
  break;
  case 2:
  printf(" ");
  break;
  default:break;
 }
 return 0;
}
void f()
{
  int a=1;
  printf("%d/n",a);
}

 
 
원인: for int a = 1;the compiler knows Arnald needs a integer a with 1 as its initial value. And it also found it is possible that in default region, the a can be used. Since the compiler cannot make sure the a will be initialized correctly for every flag, then it just issue an error(warning for some other compilers), and hope you can handle it...
And if you remove the default part, the error will dispear, since there is no initialization *skip* now...
Just put them in the case scope if you really want it...

좋은 웹페이지 즐겨찾기