Будет ли это юридическим кодом или нарушением каких-либо правил?Пропуск переключающих шкафов через ложный цикл является действительной операцией?
switch (expr)
{
do
{
case 6:
/*...*/
if (/*...*/)
break;
case 7:
/*...*/
} while (0);
case 9:
/*...*/
break;
default:
break;
}
Будет ли это законным способом выполнения дела 6, за которым следует случай 7, но только если выполнены некоторые условия? Или это приведет к неопределенному поведению и позволит носовым драконам выйти из переключателя? стр. мой вопрос относится к c99.
EDIT:
Что я хочу сделать, это следующее: предположим, корпус 9, должен быть выполнен в everycase. Если expr равно 6, я должен выполнить 6 при некоторых условиях 7 и после этого 9 или если expr равно 7 его 7-> 9 , поэтому я просто хочу пропустить 7, если выполняются некоторые условия, но я не могу изменить порядок 6,7,9.
EDIT2:
Я не ищу для альтернативного soloution, я просто заинтересован в поведении этого фрагмента.
Если коммутатор заявление имеет связанную с ним делом или по умолчанию метки в пределах сферы действия идентификатора с переменно модифицированным типом, весь оператор выключатель должен находиться в пределах рамки этого идентификатора.
из ISO/IEC 9899: ТС3 6.8.4.2-> 3
Позволяет мне не уверены в своем поведении. Но я не уверен, что будет нацелен на код, похожий на мой фрагмент.
Можете ли вы описать, что вы на самом деле пытаетесь сделать? Я считаю, что это правильный код, но может быть какое-то лучшее решение, возможно? –
Устройство Duff смешивает 'do' /' while' и 'switch' аналогично. Я бы сказал, что ваш пример не включает UB. –
@Mats Petersson done :) – dhein