Как работает оператор switch?

Как обрабатываются утверждения, идущие перед любым утверждением с меткой case в блоке switch-case. Объясните, пожалуйста, поведение следующих программ

prog1:

#include<stdio.h>
int main()
{
  switch(1)
  {   
    int i=0; 
    case 1:printf("%d",i);         
  }
getchar();
return 0;
}

Выход: мусорное значение.

prog2:

#include<stdio.h>
int main()
{
  switch(1)
  {  
    printf("Inside Switch");  
    case 1:printf("Case 1\n");      
  }
  printf("Outside Switch");
  getchar();
  return 0;
}

Выход:

Case 1

Внешний переключатель.

Операторы перед оператором с меткой case кажутся недостижимыми согласно программе 2, но тогда почему я не получаю ошибку для необъявленной переменной i в первой программе (только предупреждение).

Было бы очень полезно, если бы кто-нибудь мог подробно объяснить, как оператор switch обрабатывается внутри программы.

16
задан Bazooka 23 February 2012 в 07:45
поделиться