2013-07-31 3 views
-1

Я объявил переменную за пределами оператора case. Но если я напечатаю его значение в случае, он говорит 0. Может ли кто-нибудь объяснить?Объявление переменных вне случая

Путаница почему декларация часть берется (ИНТ б, еще, ошибка компиляции для неопределенной переменной) и почему не инициализации?

Я не смог получить ответ с вопросами отмеченные дублирует, следовательно, пост.

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 как о переходе.

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

    case 1: 
    break; 

    default: 
    break; 
} 

Когда переменная проверяется, вы прыгаете в согласующего случае игнорирования ничего между switch и case. В вашем примере определение переменной было пропущено полностью.

Вы печатаете значение неинициализированной переменной.

Смежные вопросы