Я нашел код C, который имеет эту структуру:
switch (n) {
do {
case 1:
// do some things
if (some condition)
goto go_on;
case 2:
// do some things
if (some condition)
goto go_on;
case 3:
// do some things
if (some condition)
goto go_on;
} while (1);
do {
case 4:
// do some things
if (some condition)
goto go_on;
case 5:
// do some things
if (some condition)
goto go_on;
} while (1);
}
go_on:
Я программировал в C годами (много лет назад) и думал бы, что это будет синтаксическая ошибка. Я думаю, что это связано с оптимизацией цикла, но мне было интересно, может ли кто-нибудь объяснить, что он делает. Что происходит, когда достигается while(1)
, эффективно ли он возвращается к коммутатору? И, в частности, почему есть два дела... в то время как там?
Кстати, я не хочу начинать обсуждение использования goto
, или если это плохой дизайн. Я не писал это, и я полагаю, что автор сделал это так, потому что он запустил цикл как можно быстрее.