Re[15]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 20:34
Оценка:
Здравствуйте Alexander Shargin, Вы писали:

AS>Однако используется же. В основном как раз для эмуляции исключений и корректного освобождения ресурсов в глобальном масштабе.


Если бы код CLI забит переходами из if-а в else.


if(...)
{
   ...
   if(...) goto xxx;
   ...
}
else
{
   ...
xxx:
   ...
}



И это не еденичные случаи, а закономерность.

AS> А это не семечки, такая система (написанная хорошо) не снижает, а повышает поддерживаемость/расширяемость.


Вот только ответь, что надежнее использовать обертки которые в деструкторах ресурсы освобождают. Или кородить моря goto?

AS>Про Linux могу сказать, что там во многих местах goto использован для повышения эффективности. В таких критичных местах, как планировщик, не станешь заморачиваться с лишними переменными/проверками/функциями, когда можно сделать то, что нужно, напрямик и без потерь.


Во блин! Эффективность на goto! Линукс это давно тормозная и разжиревшая ОС ни чем не отличающаяся от NT. А современные оптимизирующие компиляторы к котрым смело можно причислить VC (которым пользуется MS) и gcc (которым пользуются Линуксойды) оптимизируют в ноль весь оверхэд создаваемый ОО-обертками и лишние if уберают. От ваших вложеных циклов зачастую вообще кмня на камне не остается.


S>>А насчет ATL — я ж говорю, там в основном либо C, либо легаси код, перенесенный из того же С, который просто обломались переписать. Либо все-таки bad habits/недоделанность.


AS>Скорее не из C, а из "старого C++", который мало что умел и поддерживал.


Он деструкторы поддерживал. А этого более чем достаточно для очиски ресурсов.

AS>Тем не менее, и у MS есть разные ситуации. Так, в MFC goto зачастую используется для выхода из вложенных циклов, которые бегают по картам сообщений (CWnd::OnWndMsg, CWinThread::DispatchThreadMessageEx и т. д.).


Вот по этму мне всегда больше нравились карты сообщений ATL. Они и более гибки и goto нам нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 21:11
Оценка:
Здравствуйте DNS, Вы писали:

DNS>
DNS>for(SDirectoryRecord* pRecord3 = pRecord1->m_pFirstRecord; pRecord3;)
DNS>{
DNS>  for(;pRecord3 != NULL; pRecord3 = pRecord3->m_pNextDirectory) 
DNS>  {

DNS>[skip]

DNS>


VD>>Да в твоем случае дейсвтительно лишние извраты.


DNS>Сижу, читаю нитку...

DNS>Влад, что-то вы уже перемудрили, как раз эти 2 for-а и норовят запутать читающего, т.к.
DNS>не являются стандартным подходом к организации циклов. В первом отсутствует модификация,
DNS>во втором инициализация....

DNS>Не думаю, что я бы воспользовался подобной идей для облегчения чтения кода.


Если учесь то, что в первом случае for переносился на три строки. То этот точно читабельнее. Главное, что здесь логика структурная и ее на автомате даже анять мтожно. Ну, а для общегчения чтения кода нужно, например, вместо копирования указателей поспользоваться итераторами. Тода было бы нечто вроде:

for(SomeList::Iter i(arySome); i;)
{
if(SomeError)
{
CorrectError();
i.Reset();
continue;
}
...
}

И все, и никаких вложенных циклов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 21:19
Оценка:
Здравствуйте Patalog, Вы писали:

P>Ну, представь себе такую ситуацию.

P>Есть некий прибор, управляется ета хрень какой-нибудь двушкой в железном ящичке под голым досом. Энтих приборчиков энное количество по всему миру (например в Нижнезадрюпенской области, городе Мухосраннске).
P>Maintenance с точки зрения новых красивых фенечек ненужен\невозможен по двум причинам — как ты представляешь обновление софта в этой ситуации? И, второе, железо (приборчик) рабоает на пределе, и новых фенечек из него не высосешь. Да и не нужны они, себестоимость тоже нужно учитывать.

Ну, а как ошибочка в тоем замечательном монолите? А ты ркутой goto-шник на goto-зил и свалил в другую контору. Что делать тем беднягам которым приказано исправить ошибку и выложить в Inet патч?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 21:22
Оценка: -1
Здравствуйте Patalog, Вы писали:

P>"девушку в железном ящичке" это как "сферическая операционная система в вакууме". Я говорил именно о том, что есть случаи, каторые общим мерилом не изменишь. Те же самые умные дяденьки етот момент обычно отмечают. Иначе они не были бы умными дяденьками.


Не, все проще... Бывает когда и халява проктывает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Выйти из двух циклов сразу
От: IT Россия linq2db.com
Дата: 04.06.02 21:34
Оценка:
Здравствуйте Alexander Shargin, Вы писали:

AS>А пока — согласен — давай сосредоточимся на C++. Для начала обратимся к теме, которая стоит в сабже. В первом письме я подробно остановился именно на ней. Итак, каким образом поставленная задача решается на C++ лучше, чем с использованием goto?


Это зависит. Я бы хотел видеть код всей процедуры, а не выжимку, которую предоставил LeonGorbachev. Здесь уже давали советы. Я, в зависимости от ситуации, воспользовался бы следующим:

1. Флаг в первом цикле
2. Проверка счётчика второго цикла на завершённость
3. return
4. inline процедура (очень специфический вариант, но возможный)

Скорее всего я бы не задумываясь воспользовался первым вариантом, т.к. у меня это уже в моих личных паттернах, под коркой мозжечка :), но goto я бы использовать не стал.
2-й вариант я бы вряд ли стал использовать сейчас, хотя рашьше мог. Во-первых, нужно счётчик выносить из for, во-вторых, это затрудняет понимание программы.

IT>>Ну вот опять. Плохо уже то, что он вообще эти проблемы пораждает.


AS>Проблемы может порождать всё, что угодно. То же ООП — пачками. Я насмотрелся на пограммы, которые люди пишут в рамках концепции doc/view, которую предлагает MFC. Ей богу, уж лучше бы они свалили весь код в один класс. Именно поэтому в нашей профессии кадры решают почти всё. Эта глобальная проблема, которую не обойти запретами каких-то языковых средств. Просто если человек ламер, он повиснет на проекте тяжёлой гирей, а если нет — будет тянуть его вверх. И твои запреты вряд ли смогут сильно изменить ситуацию.


Всё это несомненно и правильно, но goto только усугубит дело. Возможно, просто получилось так, что ты видел много хорошего, старого, добротного кода с использованием goto и много плохого, "современного" и, который долго не проживёт, так как вообще не имеет право на жизнь, с doc/view. Мне приходилось видеть первый, но с качеством второго. Люди сползали с EC-ок, с PL/1 и Фортрана и начинали писать на процедурных языках. :wow: Поверь мне, doc/view, который ты видел — это детский сад по сравнению с теми уродцами, которые выходили из под пера тех программеров. Так же по старинке они печатали свои километровые процедуры, раскладывали их на полу и бродили по ним в поисках меток, которые имеют тенденцию со временем отдаляться от мест их прямого использования. Никакие уговоры не помогали. И мой шеф, мудрый человек, принял решение предать goto анафеме, запретить под угрозой лешения премии. Подействовало. И ты знаешь что самое прикольное? Размер процедур стал уменьшаться, появились элементы декомпозиции, в распечатках необходимость отпала и всё такое.

AS>>>Я и сам могу. Вопрос, будет ли твой вариант более читабельным. Думаю, что совсем не обязательно.


IT>>Естественно, цепочки if'ов тоже не лучший пример читабельности, но они вполне нормально заменяют технику, показанную тобой.


AS>Я скажу больше: они хуже, так как затрудняют и понимание, и расширяемость. Ты сам заметил, что метод с goto сильно напоминает эмуляцию деструкторов, которые и являются наилучшим решением данной задачи. Если в функцию добавляется ещё один ресурс, при моём подходе достаточно:

AS>- добавить его в секцию переменных
AS>- добавить код очистки в конец
AS>- работать с ресурсом как ни в чём не бывало.

AS>Логика же вложенных if-ов при таком добавлении может полностью измениться. Вот это-то как раз и плохо.


Мои аргументы.
— я никогда не перепутаю порядок освобождения ресурсов, если он важен,
— я могу работать с ресурсами локально, в определённой точке программы и не держать их долго без надобности, особенно при наличии длинных циклов,
— я могу использовать их в тех же циклах, открывая и закрывая их при каждой итерации,
— я могу использовать return более гибко, в том числе и для сабжа, что в твоём случае невозможно, т.к. программа обязательно должно доползти до конца... хотя ты можешь, конечно, использовать ещё один goto ;)
Если нам не помогут, то мы тоже никого не пощадим.
Re[22]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 22:19
Оценка:
Здравствуйте George_Seryakov, Вы писали:

VD>>Мне до их прдах дела нет. Думаю визио продается куда лучше, что же теперь мне продукты по рейтингу продаж выбирать?


GS>Да. Поглядывать. Соберут они денег на сделать следующую версию или нет. Вот Микрософь собрал денег на сделать NT, а IBM слил воду.


Знаешь. В те времена MS еще не было таким страшным. Я их прекрасно помню. Но я тогда 95-ые как раз принял не из-за денег. Они тогда действительно больше подходили к обстановке. И сделаны были лучше (хоть и архитектурно проигрывали), т.е. куча драйверов, отличная совместимость с 3.1-ми.

GS>Продукт будет развиваться в расчете на текущих пользователей, а они — игруны, не проектировщики.


Тогда буду ждать пока их Роза разовьется до такого уровня, чтобы я смог ею пользоваться.

VD>>Там ного чего есть. Там например есть нечто очень похожее на дизайнер тех самые конечных автоматов (забыл как называется).


GS>Диаграмма взаимодействий. Которая на самом деле SDT и диаграмма Хоара одновременно.


Ну, так вот кривая она. У того маньяка со свичь-технологиями и то идейно все более продуманно. Для меня Роза — это как BPWin, рисовашка одно слово.

GS>Ну. Так главное — проектировать, а генерировать можно и врукопашную.


И проектировать можно врукопашную. Мне вот кодеров не хватает.

GS>А вот сейчас тебе и скажут, что ты, значит, и не проектируешь.


Да мне по барабану, кто что скажет. Я знаю чем я занимаюсь и знаю, что пока не видел приемлемого (для меня) продукта позволяющего ускорить процесс.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Выйти из двух циклов сразу
От: George_Seryakov Россия  
Дата: 04.06.02 22:28
Оценка:
Здравствуйте VladD2, Вы писали:

GS>>Да. Поглядывать. Соберут они денег на сделать следующую версию или нет. Вот Микрософь собрал денег на сделать NT, а IBM слил воду.


VD>Знаешь. В те времена MS еще не было таким страшным. Я их прекрасно помню.


Кул. А ворд микрософтовский под дос?

VD>Но я тогда 95-ые как раз принял не из-за денег.


Я, вобще-то про 3.1 говорил.

VD>Они тогда действительно больше подходили к обстановке. И сделаны были лучше (хоть и архитектурно проигрывали), т.е. куча драйверов, отличная совместимость с 3.1-ми.


Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а крелит доверия опльзователей, или доля рынка.

VD>Ну, так вот кривая она. У того маньяка со свичь-технологиями и то идейно все более продуманно. Для меня Роза — это как BPWin, рисовашка одно слово.


Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает.
GS
Re[24]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 22:38
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Кул. А ворд микрософтовский под дос?


А что ворд. Для него в те годы даже Лексикон и том конкурентом был. Я уже не говорю про разные Перфекты.

VD>>Но я тогда 95-ые как раз принял не из-за денег.


GS>Я, вобще-то про 3.1 говорил.


Дык полуось все же с 95-ми боролась. 3.1 в нее встроены были. Это же их общий продукт был.

GS>Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а крелит доверия опльзователей, или доля рынка.


Если бы все это глюкало меньше, я бы скзал, ну и замечательно.

GS>Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает.


Ну, зачем же так?

Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Выйти из двух циклов сразу
От: George_Seryakov Россия  
Дата: 04.06.02 22:44
Оценка:
Здравствуйте VladD2, Вы писали:

GS>>Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а кредит доверия пользователей, или доля рынка.


VD>Если бы все это глюкало меньше, я бы скзал, ну и замечательно.


Пипл хавает. Нет, даже так: ПИПЛ ХАВАЕТ! Уж ты-то должен это понимать.

GS>>Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает.


VD>Ну, зачем же так?


VD>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования.


Тогда жди.
GS
Re[15]: Выйти из двух циклов сразу
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.06.02 22:49
Оценка: 17 (2)
Здравствуйте Alexander Shargin, Вы писали:


AS>>>Не очень понятно, к чему всё это. Можно конкретный пример?


IT>>Я к тому, что даже в приведённом тобой для C случая люди пытаются боряться с goto применением всевозможных сил и средств, например, макросов примерно так:


AS>Всё равно не понятно. Что с того, что кто-то так делает? Я, например, встречал такие конструкции редко. И там где встречал, матерился, так как приходилось разбираться, что стоит за этими макросами, и потом держать это в голове.


IT хотел сказать, что если оформить goto как-то так:

BEGIN_LOOP(A)(;;)
  BEGIN_LOOP(B)(int i = 0; i < 100; i++)
    if(i == 77)
      // вот тут хочу выйти вообще из всех циклов - из  for и из while
      BREAK_LOOP(A);
  END_LOOP(B)
END_LOOP(A)

то читаться это будет намного лучше (даже человеком, который не знает реализацию данных макросов)


#define BEGIN_LOOP(a) for
#define END_LOOP(a) loop_##a:
#define BREAK_LOOP(a) goto loop_##a
Re[26]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 22:49
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Пипл хавает. Нет, даже так: ПИПЛ ХАВАЕТ! Уж ты-то должен это понимать.


Дык. Сами и хаваем. Но всегда хочется чего нибудь большого и пушистого.

VD>>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования.


GS>Тогда жди.


Похоже проще самому сдалть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 22:57
Оценка:
Здравствуйте DarkGray, Вы писали:

DG>IT хотел сказать, что если оформить goto как-то так:

DG>

DG>BEGIN_LOOP(A)(;;)
DG>  BEGIN_LOOP(B)(int i = 0; i < 100; i++)
DG>    if(i == 77)
DG>      // вот тут хочу выйти вообще из всех циклов - из  for и из while
DG>      BREAK_LOOP(A);
DG>  END_LOOP(B)
DG>END_LOOP(A)

DG>то читаться это будет намного лучше (даже человеком, который не знает реализацию данных макросов)


DG>#define BEGIN_LOOP(a) for
DG>#define END_LOOP(a) loop_##a:
DG>#define BREAK_LOOP(a) goto loop_##a

DG>


Вот и верь потом в скзки про вердность макросов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Выйти из двух циклов сразу
От: George_Seryakov Россия  
Дата: 04.06.02 22:57
Оценка:
Здравствуйте VladD2, Вы писали:

VD>>>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования.


GS>>Тогда жди.


VD>Похоже проще самому сдалть.


Давай делать. Нотацию какую будем поддерживать? UML? Генерировать скелет или сразу весь код придется мышкой вазюкать?

В принципе, есть перекос, в который можно пропихнуть лапу: привязка моделирования и кодогенерации к библиотекам кода и готовых решений. Типа — разбираем рукописное приложение на образцы, и моделируем из этих образцов. Это может дать весьма высокую готовность нагенеренного кода. Ключевым тут является модель хранения кода, моделей и их провязки.
GS
Re[16]: Выйти из двух циклов сразу
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.06.02 23:04
Оценка:
Здравствуйте DarkGray, Вы писали:

AS>>>>Не очень понятно, к чему всё это. Можно конкретный пример?


IT>>>Я к тому, что даже в приведённом тобой для C случая люди пытаются боряться с goto применением всевозможных сил и средств, например, макросов примерно так:


AS>>Всё равно не понятно. Что с того, что кто-то так делает? Я, например, встречал такие конструкции редко. И там где встречал, матерился, так как приходилось разбираться, что стоит за этими макросами, и потом держать это в голове.


DG>IT хотел сказать, что если оформить goto как-то так:



Еще менее напряжный код, как для пищущего программиста, так и для читающего (но зато более напряжный на оптимизатор):

naming_for(A)(;;)
{
  for(int i = 0; i < 100; i++)
  {
    if(i == 77)
      // вот тут хочу выйти вообще из всех циклов - из  for и из while
      break_naming_for(A);
  }
}


#define break_naming_for(a) is_run_naming_for_##a = false; goto naming_for_label_##a;

#define naming_for(a) bool is_run_naming_for_##a = true; naming_for_label_##a:; if (is_run_naming_for_##a) for

//всю гадость выкинет оптимизатор, а читабельность останется
Re[28]: Выйти из двух циклов сразу
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.02 23:05
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Давай делать. Нотацию какую будем поддерживать? UML? Генерировать скелет или сразу весь код придется мышкой вазюкать?


GS>В принципе, есть перекос, в который можно пропихнуть лапу: привязка моделирования и кодогенерации к библиотекам кода и готовых решений. Типа — разбираем рукописное приложение на образцы, и моделируем из этих образцов. Это может дать весьма высокую готовность нагенеренного кода. Ключевым тут является модель хранения кода, моделей и их провязки.


Мне не нравится сама концепция генерации кода. Я себе это вижу так:

1. Есть некая прикладная область. Не узкая, не широкая, а в самый раз.
2. Есть некая компонентная модель. Расширяемая теми самыми технологиями где ручками нужно кодить.
3. Есть некий конструктор-моделлер, который позволяет описывать проблемы этой предметной области в виде диаграмм структур данных.
4. Есть встроенные средства позволяющие создавать GUI для этих моделей (опять же без программирования).
5. Есть возможность подключать модули (компоненты) написанные на обычных языках..
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Выйти из двух циклов сразу
От: George_Seryakov Россия  
Дата: 04.06.02 23:16
Оценка:
Здравствуйте VladD2, Вы писали:

VD>1. Есть некая прикладная область. Не узкая, не широкая, а в самый раз.

VD>2. Есть некая компонентная модель. Расширяемая теми самыми технологиями где ручками нужно кодить.
VD>3. Есть некий конструктор-моделлер, который позволяет описывать проблемы этой предметной области в виде диаграмм структур данных.
VD>4. Есть встроенные средства позволяющие создавать GUI для этих моделей (опять же без программирования).
VD>5. Есть возможность подключать модули (компоненты) написанные на обычных языках..

Автоматизация программирования для предметной области. Мне такое не интересно. Хотя коммерчески может быть весьма успешным: САПР Бухгалтерия! САПР Отчеты по бухгалтерии! САПР Отчеты в налоговую! САПР Левая бухгалтерия! САПР Кадры! САПР Крупный банк! САПР Мелкий банк! и т.д. и т.п., и за все бабки.

И куда только вся эта тьма наглюканых бухгалтерий потом деваться будет?
GS
Re[3]: Выйти из двух циклов сразу
От: m.a.g. Мальта http://dottedmag.net/
Дата: 05.06.02 00:40
Оценка:
Здравствуйте Patalog, Вы писали:

P>Никак не могу понять почему народ так боится goto? Для этого есть какие-то причины помимо эстетических? Ежели есть просветите плиз. А то я иногда пользуюсь, особенно в подобных случаях, и мне кажется это более красиво, чем с переменной...


Кстати, даже добавление break (не говоря уж о goto) к структурному программированию портит всю теоретическую картину — рушится весь конструктивизм и многие теоремы существования. Кстати, многие неудобные места в современных языках программирования — это просто следствия из неправильного теоретического проектирования языка.

P>ЗЫж Не флейма окаянного ради, может я и правда чего не знаю/понимаю?


Для детального анализа нужна мат. логика и обобщенная теория моделей вкупе с теорией категорий.
Re[8]: Выйти из двух циклов сразу
От: m.a.g. Мальта http://dottedmag.net/
Дата: 05.06.02 00:44
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Повторюь еще раз. goto не структурированный оператор. И его ипользование вност хаотичность в код.


Про схемы Янова слышал? Посмотри — потом будешь говорить насчет неструктурированности. Все зависит от контекста.

VD>У нас в конторе написано ~ 300 000 рабочего кода (не считая кода к статьям) на C++ и goto не разу не применялся. Один программист как то раз начал отстаивать точку зрения "что в его случае лучше применить goto" и рьяно так... но когда мы переписали его код, он и сам согласился, что так элегантнее, понятее и безопаснее.


Единственное условие применения структурных конструкций — "правило отсутствия неожиданностей". Если применение goto удовлетворяет этому принципу — оно и элегантно, и понятно, и безопасно.
Re[16]: Выйти из двух циклов сразу
От: Patalog Россия  
Дата: 05.06.02 04:44
Оценка:
Здравствуйте IT, Вы писали:

Пардон, вмешаюсь...

IT>Мои аргументы.

IT>- я никогда не перепутаю порядок освобождения ресурсов, если он важен,
IT>- я могу работать с ресурсами локально, в определённой точке программы и не держать их долго без надобности, особенно при наличии длинных циклов,
IT>- я могу использовать их в тех же циклах, открывая и закрывая их при каждой итерации,
IT>- я могу использовать return более гибко, в том числе и для сабжа, что в твоём случае невозможно, т.к. программа обязательно должно доползти до конца... хотя ты можешь, конечно, использовать ещё один goto

Странные у тебя аргументы. То ты говоришь о некоем абстрактном горе-программисте, которому ни в коем случае нельзя давать в руки страшное оружие goto. И тут же приводишь в пример себя любимого, дескать "я никогда не перепутаю порядок освобождения ресурсов, если он важен" и далее по тексту. А что мешает этому абстрактному программисту перепутаь?

И еще, касательно 3-го пункта "аргументов": А ежели этот самый ресурс, который ты будешь открывать и закрывать в каждой итерации сильно долго открывается\закрывается?
Почетный кавалер ордена Совка.
Re[6]: Выйти из двух циклов сразу
От: Patalog Россия  
Дата: 05.06.02 04:49
Оценка:
Здравствуйте flyker, Вы писали:

[skip]

F>
F>for(SDirectoryRecord* pRecord3 = pRecord1->m_pFirstRecord; pRecord3 != NULL; pRecord3 = pRecord3->m_pNextDirectory) {
F>   if(pRecord3 != pRecord2 && pRecord2->m_nLevel == pRecord3->m_nLevel) {
F>       nRes = CompareRecord(pRecord2, pRecord3, nType) == 0 ? CCB_ERR_EQUAL_ID : CCB_ERR_NOERROR;
F>       if(nRes != CCB_ERR_NOERROR) {
F>            pCheckControl->m_data1 = reinterpret_cast<long>(pRecord2);
F>            pCheckControl->m_data2 = reinterpret_cast<long>(pRecord3);
F>            nCallBackRes = pCheckControl->DoControl(nRes); //Передается юзеру, который должен как-то отреагировать на ошибку
F>            nErrorCount++;
F>            
F>            if(nCallBackRes == CCB_RES_MAKEAUTO || nCallBackRes == CCB_RES_IGNORE) continue; //OK, продолжаем дальше
F>            else if(nCallBackRes == CCB_RES_ABORT) return nErrorCount; //Failed, отмена
F>            else
F>            {
F>                pRecord3 = pRecord1->m_pFirstRecord; //Юзер попытался исправить ошибку, надо проверить заново
F>                continue;
F>             }
F>       }
F>   }
F>}
F>


F>Я бы так написал, а как другие пишут мне глубоко по барабану, лишь бы не мне читать и править.

F>Но в данном конкретном случае оба варианта имеют право на жизнь.
F>Хотя если бы не комментарий в ключевой строке, дольше бы понимал суть.

Похоже суть ты так и не понял. Ежели было все так просто, ни о каком goto в данном случае речи бы не было.
А комментарий в ключевой строке гласит "Юзер попытался исправить ошибку, надо проверить заново". Дальше продолжать?
Почетный кавалер ордена Совка.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.