2016-11-04 4 views
-2

В этом коде, почему я получаю i = «некоторое количество мусора» в качестве вывода? Я вижу, что i объявляется, но значение = 10, а не назначено. Зачем ?Корпус внутреннего переключателя - переменная Определение Связанный

main() 
{ 
int a =1; 
switch (a) 
{ 
int b = 10; 
case 1: printf ("b = %d \n", b); 
break; 
} 
+1

Compile с '-Wall' и исправить предупреждения. – user3386109

ответ

3

b не инициализируется. Назначение вне любого случая в коммутаторе, поэтому он выбирает все, что было в стеке в этот момент.

+0

Будет ли я ошибаться, если я скажу, что назначение выполняется на этапе исполнения, а декларация уже выполняется переводчиком. Во время выполнения случайное значение выбирается из стека. – Doherty

+0

Будет ли я ошибаться, если я скажу, что назначение выполняется на этапе исполнения, а декларация уже выполняется переводчиком. Во время выполнения случайное значение выбирается из стека? @Pablo Alcubilla – Doherty

+0

Вот и все. Компилятор выделяет память для всех переменных. Затем при выполнении они инициализируются. –

1

Если вы хотите переменную внутри сазе, правильный способ сделать это:

switch(a) 
{ 
case 1: 
{ 
    int b=10; //start a new block scope 
    printf("b=%d",b); 
} 
break; 
} 
+0

Я знаю, но решение, которое вы поделили, меняет мои потребности. Объявление int b в вашем коде не будет доступно другим случаям. В любом случае, но это не то, что я хотел обсудить. Я просто хочу понять, почему мой код ведет себя непредсказуемо. @Akshay Immanuel – Doherty

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