Цикл do while бывает очень полезным и бывают случаи, когда он даже удобней. Но, в целом, необходимости в нем нету и легко заменяется любым другим
Цикл do while нужен ровно в одном случае: когда ты преподаватель и рассказываешь тему "циклы".
[зануда-mode-on]
Вот-вот. do-while работает так же как обычный while, кроме первой итерации, которая будет выполнена в любом случае. do-while можно переписать на while так:
run()
while(not edge) { run() }
Или оба упадут. В зависимости от длины шага run() и на сколько далеко вперёд проверяет edge()
Если run() и edge() не согласованы через одну точку редактирования getStepSize(), то это можно уже считать проебом архитектуры
Очень удобно использовать когда надо оформить функцию, которая может возвращать несколько значений, а по кодингстайлу return может быть только один.
int foo(void) {
int ret = 0;
do {
if(something) {
ret = 1;
break;
else if (something2) {
ret = 2;
break;
....
}
} while (0)
return ret;
}
Не понял смысла этой конструкции. Что принципиально изменится если убрать цикл с брэйками?
If
else if
else if
else
...
Return
Или использовать switch
Я просто второпях накидал, криво согласен. Вот подробнее пример, когда надо сделать ранний выход из-за ошибки.
int foo(void) {
int ret = 0;
//some code
do {
ret = foo1();
if (ret != 0) break;
...
ret = foo2();
if (ret !=0) break;
...
} while (0);
return ret;
}
Смысл, я думаю, ясен. switch-case тут не сработает, если нужна последовательность действий.
чувак, тебе табов с пробелами отсыпать? Я прогаю на си, но даже у меня чуть глаза не вытекли.
P.s. Я может тупой, но тут вроде вообще ничего не измениттся если убрать do while.
Если убрать do - while , то тогда придется ставить return когда сработало каждое условие и убирать break, а по условию задачи return должен быть один.
Отступы были, но куда-то делись при отправке.
Я переадресую твой вопрос нашему заказчику, а он наверное почешет репу и скажет: "бля, и правда! раз сам Steelycrack задумался в чем тут смысл, то наверное, нам надо переписать весь наш код, который мы пишем уже хуй знает сколько лет"
А можете на чистом си показать как это будет выглядеть? А то я с такими конструкциями не сталкивался.
И чем же? Просто очень интересно. У нас в конторе применяется данный метод, чтобы соответствовать кодингстайлу. Как это можно решить иначе?
Как это можно решить иначе?
Конкретно этот код - вот так:
int foo(void) {
int ret = 0;
//some code
ret = foo1();
...
if (ret == 0) {
ret = foo2();
}
if (ret == 0) {
...
}
return ret;
}
Да, это работает, но хуже читается, потому что вызов следующей функции стоит под условием. Так что я бы это код назвал бы более индийским, чем мой.
Но ведь у вас по логике функции вызываются только при соблюдении этих условий, а в коде это явно не отображено, что делает нечитаемой логику кода.
По логике мы должны вывалиться из foo сразу же как только произошла ошибка в вызываемой функции.
На всякий случай. Я бы лично напихал ассертов, но нам надо коллекционировать статистику ошибок, я бы лично напихал ретёрнов, но мы связаны кодстайлом заказчика.
У вас нет ошибки в описанном коде (кроме синтаксиса, на мой взгляд), есть (не)выполнение условия. Давайте оставаться в рамках обсуждения написанного вами кода.
IT-юмор
5.6K поста52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору