Ответ 1
Вы можете представить конструкцию switch(value){case label:, ...}
как переменную goto <label>
, где:
1) switch(arg)
определяет, какое выполнение label
будет выполняться до следующего.
2) Ключевое слово case: определяет метку . Пример: case label:
.
В операторе switch за ключевым словом case
следует метка (постоянное выражение, за которым следует :
), который обрабатывается как метка, используемая в операторах goto
. Элемент управления переходит к оператору, чей case constant-expression
соответствует значению switch(arg)
.
Таким образом, в вашем коде нет ничего синтаксически неправильного. То есть, он будет компилироваться и создаваться, и работать просто отлично. Единственное, что нарушает синтаксис в вашем примере кода, - это читаемость, поскольку поток выполнения игнорирует блок {...}
, который в большинстве случаев будет направлять поток выполнения и переходит непосредственно к целевой метке, определяемой ключевым словом case
, просто как это должно.
Не так часто, что игнорирование хорошо установленного прецедента для экспериментов с новыми гибридными конструкциями даст полезные результаты. Но когда это произойдет, результаты могут стать легендарными. Например, см. Duff Device.