> -- Александр Ильин писал(а):
> Я с Си плохо знаком, но ошибок в коде не вижу. Результат = 5, да?
С точки зрения читателя этот кусок:## Код:
```
case 8:
        {
            switch (d)
            case 0:
                a = 4;
                break;
            case 1:
                a = 5;
                break;
        }
```
должен выглядеть так:## Код:
```
case 8:
            switch (d)
            {
            case 0:
                a = 4;
                break;
            case 1:
                a = 5;
                break;
            }
```
Тогда результат будет равен 5.

Однако синтаксис оператора switch таков:
## Код:
```
switch (expression) statement;
```
где statement вовсе не обязан быть составным оператором с case-метками.
Поэтому ЦПУ следует такому пути:## Код:
```
int g = 8;
    int a = 90;
    int d = 1;
    switch (g) 
    {
        case 8: // сюда попадаем: g == 8
        {
            switch (d) // d == 1

            case 0:    // поэтому сюда не попадаем
                a = 4; // и этот оператор присваивания не выполняется

            // а тут уже оператор switch (d) заканчивается, так как у него несоставной statement (case 0: a = 4;)

                break; // упс! а этот break уже относится к оператору switch (g), выходим к оператору return a;

            case 1:    // мёртвый код
                a = 5; // мёртвый код
                break; // мёртвый код
        }
    }
    return a; // a нигде не менялся, поэтому равен 90
```
