2013-07-31 2 views
-1

사례 문 외부에서 변수를 선언했습니다. 하지만 그 값을 한 경우에 인쇄하면 0이됩니다. 누구든지 설명 할 수 있습니까?사례 변수 외부에서 변수 선언

혼란이 선언 부분 (변수에 대한 정의의 다른 INT B, 컴파일 오류) 촬영되는 이유 및 이유 초기화 아닌가? 질문은 중복을 따라서 포스트를 표시와

나는 대답을 얻을 수 없습니다.

main() 
    { 
     int a=1; 
     switch(a) 
     {  

      int b = 6; 
      case 1: 
      { 
      printf("b is %d\n",b); 
     } 
      break; 
      default:printf("b is %d in default\n",a); 
      break; 
     } 
     return 0; 
    } 
+0

이것은 정의되지 않은 동작입니다. –

+0

[이 C 프로그램의 출력을 설명] (http://stackoverflow.com/questions/17749100/explain-output-of-this-c-program) –

+2

왜이 세상에서하고 싶습니까? 이..? – Sean

답변

1

변수가 초기화

int b; 
b = 6; 

경우에 스위치가 발생하는 경우에 스킵 고토처럼 동작으로 변환 될 수있다. 따라서 b = 6 행을 printf으로 바로 건너 뛰면 b 값이 정의되지 않습니다.

+0

이유는 int b입니다. 이 경우 건너 뛰지 않습니까? – Aadishri

1

case 문을 goto로 생각하십시오. 변수가 시험 할 때

switch(test){ 
    printf("This code is skipped!\n"); 

    case 1: 
    break; 

    default: 
    break; 
} 

, 당신은 switchcase 사이에 아무 것도 무시 일치하는 경우로 이동합니다. 귀하의 예에서, 변수 정의는 완전히 건너 뜁니다.

초기화되지 않은 변수의 값을 인쇄하고 있습니다.