Ключевое слово break
в C ++ завершает только самую вложенную итерацию или оператор switch
. Таким образом, вы не можете выйти из цикла while (true)
непосредственно в операторе switch
; однако вы можете использовать следующий код, который я считаю отличным шаблоном для такого рода проблем:
for (; msg->state != DONE; msg = next_message()) {
switch (msg->state) {
case MSGTYPE:
//...
break;
//...
}
}
Если вам нужно было что-то сделать, когда msg->state
равно DONE
(например, запустить процедуру очистки), поместите этот код сразу после цикла for
; т.е. если у вас есть:
while (true) {
switch (msg->state) {
case MSGTYPE:
//...
break;
//...
case DONE:
do_cleanup();
break;
}
if (msg->state == DONE)
break;
msg = next_message();
}
Тогда используйте вместо:
for (; msg->state != DONE; msg = next_message()) {
switch (msg->state) {
case MSGTYPE:
//...
break;
//...
}
}
assert(msg->state == DONE);
do_cleanup();