Время от времени я использую блок while(1)
, чтобы сгладить последовательность if..else
, выходящую из пропорции. Он идет по этим линиям.
Вместо этого:
// process
if (success) {
// process
if (success) {
//process
if (success) {
// etc
}
}
}
Я делаю:
while (1) {
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc
break;
}
Меня немного раздражает неявный прыжок в конце while
. Могу ли я уйти с более стройной конструкцией (т.е. Нет break
в конце)?
Я мог бы обменять окончательный break
на переменную (или зарегистрироваться?). Это не совсем четкое или четкое.
int once = 1;
while (once--) {
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc
}
А для цикла будет выглядеть немного лучше (C99):
for (int once = 1 ; once--; once) {
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc
}
Я думал об использовании корпуса коммутатора. Это выглядит не намного лучше, хотя это сработает.
switch (1) { default:
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc
}
В этом конкретном случае понятие метки кажется непобедимым.
// process
if (!success) goto end;
// process
if (!success) goto end;
// process
if (!success) goto end;
// etc
end:
Какой другой подход вы знаете/используете?