-
- В данном случае { не нужна. С точки зрения стандарта код корректен. Правда, учитывая то, что в стандарте не оговорено, допускается ли case во вложенных блоках, некоторые компиляторы могут ругнуться "case without switch" - testerplus(19.02.2013 18:10 - 18:16)
- Упс... MS VisualC++ проигнорировал if(0). Т.е. не то, что даже не выкинул код в нем, а тупо его исполнил. testerplus(399 знак., 19.02.2013 18:13)
- не тупо, а как написано. переход по switch выполнил. - Vit(19.02.2013 18:38)
- Нифига! case работает, как метка, на которую ПЕРЕСКАКИВАЕТ switch. В принципе писать что-то внутри тела switch в этом месте неположено, т.к. нет такого значения x, при котором эта шапка исполнялась бы. - Ксения(19.02.2013 18:38)
- Стандарту не противоречит Codavr(108 знак., 19.02.2013 20:31)
- Пардон сомнения закрались. Надо стандарт рыть а не инетовые интерпретации. - Codavr(19.02.2013 20:38)
- Посмотрел стандарт. Все законно. Codavr(272 знак., 20.02.2013 22:30, ссылка)
- Пардон сомнения закрались. Надо стандарт рыть а не инетовые интерпретации. - Codavr(19.02.2013 20:38)
- Он не сразу перескакивает, он сначала должен выполнить все то, что написано до case'ов (C99: 6.8.4.2 стих 7). Вопрос fk0 был в том, как компилятором будут рассматриваться метки, заблокированные if'ом - testerplus(19.02.2013 20:11)
- Хренушки. Вычислили то что в свиче и сразу на вычисленую метку. Все остальное идет лесом. - Codavr(19.02.2013 20:33)
- Да, согласен. Невнимательно прочитал текст под примером из стандарта. Действительно переход делается сразу. - testerplus(19.02.2013 20:34)
- Наоборот не должен. Но там можно что-то декларировать. - fk0(19.02.2013 20:27)
- Хренушки. Вычислили то что в свиче и сразу на вычисленую метку. Все остальное идет лесом. - Codavr(19.02.2013 20:33)
- Стандарту не противоречит Codavr(108 знак., 19.02.2013 20:31)
- Упс... MS VisualC++ проигнорировал if(0). Т.е. не то, что даже не выкинул код в нем, а тупо его исполнил. testerplus(399 знак., 19.02.2013 18:13)
- Я потому и спрашиваю, что компилируется и даже работает... Смотрел стандарт. После switch должен быть оператор или блок {}. Получается первое. Смущает, что switch получается -- это такой ненормальный способ сделать goto куда попало... - fk0(19.02.2013 18:11)
- Почему куда попало. Он вычисляет значение и делает переход на вычисленую метку. Все законно правда операторы if и else недостижимы. Должны быть варнинги про них. Вот эквивалент Codavr(121 знак., 19.02.2013 20:23 - 20:28)
- В данном случае { не нужна. С точки зрения стандарта код корректен. Правда, учитывая то, что в стандарте не оговорено, допускается ли case во вложенных блоках, некоторые компиляторы могут ругнуться "case without switch" - testerplus(19.02.2013 18:10 - 18:16)