Это тот же синтаксис, что и слишком много языков:
switch (someValue) {
case OPTION_ONE:
case OPTION_LIKE_ONE:
case OPTION_ONE_SIMILAR:
doSomeStuff1();
break; // EXIT the switch
case OPTION_TWO_WITH_PRE_ACTION:
doPreActionStuff2();
// the default is to CONTINUE to next case
case OPTION_TWO:
doSomeStuff2();
break; // EXIT the switch
case OPTION_THREE:
doSomeStuff3();
break; // EXIT the switch
}
Теперь все, что вам известно, что инструкции break
требуются, потому что switch
будет продолжаться до следующего case
, когда отсутствует инструкция break
. Мы имеем пример с OPTION_LIKE_ONE
, OPTION_ONE_SIMILAR
и OPTION_TWO_WITH_PRE_ACTION
. Проблема в том, что нам нужно только "переходить к следующему случаю" очень редко. И очень часто мы помещаем разрыв в конце case
.
Очень легко начинающему забыть об этом. И один из моих учителей C даже объяснил это нам, как если бы это была ошибка на языке C (не хотите говорить об этом:)
Я хотел бы спросить, есть ли какие-либо другие языки, о которых я не знаю (или забыл), которые обрабатывают switch/case следующим образом:
switch (someValue) {
case OPTION_ONE: continue; // CONTINUE to next case
case OPTION_LIKE_ONE: continue; // CONTINUE to next case
case OPTION_ONE_SIMILAR:
doSomeStuff1();
// the default is to EXIT the switch
case OPTION_TWO_WITH_PRE_ACTION:
doPreActionStuff2();
continue; // CONTINUE to next case
case OPTION_TWO:
doSomeStuff2();
// the default is to EXIT the switch
case OPTION_THREE:
doSomeStuff3();
// the default is to EXIT the switch
}
Второй вопрос: есть ли какой-либо исторический смысл, почему это так в C? Может быть продолжение следующего случая было использовано гораздо чаще, чем мы используем его в наши дни?