готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 08:36
Оценка: 1 (1) -2 :))) :))) :)
Всем привет

инструменты:

шелл Cygwin Terminal из пакета Cygwin
утилита grep из пакета Cygwin

(кстати рекомендую всем у кого еще не установлен пакет Cygwin обязательно поставить получите юникс шелл и юникс утилиты)

жертва сорцы nt4

запускаем
$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
result: 54760 goto


жертва сорцы win2k

запускаем
$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
result: 40460 goto


вывод ? goto сила








08.02.12 20:28: Перенесено модератором из 'C/C++' — Кодт
Re: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 08:46
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Всем привет


J>инструменты:


J>шелл Cygwin Terminal из пакета Cygwin

J>утилита grep из пакета Cygwin

J>(кстати рекомендую всем у кого еще не установлен пакет Cygwin обязательно поставить получите юникс шелл и юникс утилиты)


J>жертва сорцы nt4


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
J>result: 54760 goto
J>


J>жертва сорцы win2k


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
J>result: 40460 goto
J>


J>вывод ? goto сила







А почему вы не допускаете, что эти goto могут присутствовать лишь в комментариях к коду?
Меня можно встретить на www.cpp.forum24.ru
Re[2]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 08:59
Оценка:
Здравствуйте, Сыроежка, Вы писали:
>>>А почему вы не допускаете, что эти goto могут присутствовать лишь в комментариях к коду?

я конечно же допускаю что есть и левые из комментариев для верности можно немного отнять
Re: готофобам к размышлению
От: kpcb Россия  
Дата: 08.02.12 09:00
Оценка: +3
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вывод ? goto сила


По-моему, на чистом С/Objective-C goto сильно облегчает жизнь, если пользоваться с умом
Re[2]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 09:04
Оценка: -10 :))) :)
Здравствуйте, kpcb, Вы писали:

K>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>вывод ? goto сила


K>По-моему, на чистом С/Objective-C goto сильно облегчает жизнь, если пользоваться с умом






На С это облегчает жизнь лишь тем, кто не умеет писать программы, то есть идут по пути наименьшего сопротивления: мол, зачем думать, когда я могу вставить goto.
Меня можно встретить на www.cpp.forum24.ru
Re: готофобам к размышлению
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 08.02.12 09:06
Оценка: 1 (1) +3
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
J>result: 54760 goto
J>

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
J>result: 40460 goto
J>


Такими темпами, к релизу Win7 должны бы были все вычистить.
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 09:23
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>
J>>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
J>>result: 54760 goto
J>>

J>>
J>>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
J>>result: 40460 goto
J>>


DR>Такими темпами, к релизу Win7 должны бы были все вычистить.


да нет там просто сорцы win2k немного урезанные по сравнению с nt4
Re: готофобам к размышлению
От: ilnar Россия  
Дата: 08.02.12 10:19
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Всем привет


J>инструменты:


J>шелл Cygwin Terminal из пакета Cygwin

J>утилита grep из пакета Cygwin

J>(кстати рекомендую всем у кого еще не установлен пакет Cygwin обязательно поставить получите юникс шелл и юникс утилиты)


J>жертва сорцы nt4


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
J>result: 54760 goto
J>


J>жертва сорцы win2k


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
J>result: 40460 goto
J>


J>вывод ? goto сила



может быть.
а вообще в продакшен коде работающий код как корова в индии, его не трогают.
вот и живут goto много итераций выпуска, пока не понадобится именно это место переделать по какой-то причине.
Re[3]: готофобам к размышлению
От: Константин Россия  
Дата: 08.02.12 10:21
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

DR>>Такими темпами, к релизу Win7 должны бы были все вычистить.


J>да нет там просто сорцы win2k немного урезанные по сравнению с nt4


Думаю, измерения были бы намного интересней, если узнать

— Относительное количество goto к объемам исходников
— статистику отдельно для c/c++
Re: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 10:48
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>жертва сорцы nt4

J>жертва сорцы win2k
J>вывод ? goto сила

Не! Ты лялих забыл погрепить!
А то может вывод совсем и другий. Типа винда -- маст дай!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 10:50
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>На С это облегчает жизнь лишь тем, кто не умеет писать программы, то есть идут по пути наименьшего сопротивления: мол, зачем думать, когда я могу вставить goto.


Именно эти люди и писали винду оба раза
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 11:02
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Сыроежка, Вы писали:


С>>На С это облегчает жизнь лишь тем, кто не умеет писать программы, то есть идут по пути наименьшего сопротивления: мол, зачем думать, когда я могу вставить goto.


E>Именно эти люди и писали винду оба раза


На самом деле трудно сказать, какие люди писали, и какие люди пишут сейчас. Проект огромный и за это время сменилось уже очень много программистов, участвующих в проекте.
Как здесь правильно было замечано, старый код меняют лишь в крайнекй необходимости, коогда это вынуждено. То есть либо когда надо внести изменения в код в связи с новой функциональностью, либо когда найден баг. Кроме того, как я уже заметил, это могут быть комментарии. То есть у каждой функции стоит преамбула в виде ее описания, где могут использоваться для простоты работы алгоритма слова goto.
А самое главное — не надо наивно думать, что в софтверных фирмах работают высококвалифицированные программисты. Высококвалифицированные программисты — это небольшая прослойка. А в основном в проектах участвуют, как я их называю, пофигисты, которые пишут по принципу "тяп-ляп" — лишь бы работало.
Меня можно встретить на www.cpp.forum24.ru
Re[4]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 11:19
Оценка:
Здравствуйте, Константин, Вы писали:

К>Думаю, измерения были бы намного интересней, если узнать


К>- Относительное количество goto к объемам исходников

К>- статистику отдельно для c/c++

сделал более детальное фильтрование

nt4 sources

$ grep -r --include=*.c -P 'goto (.+);' "C:/nt4"
result: 42538 goto

$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/nt4"
result: 8236 goto


win2k sources

$ grep -r --include=*.c -P 'goto (.+);' "C:/win2k"
result: 16523 goto

$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/win2k"
result: 23022 goto
Re: готофобам к размышлению
От: Mr.Cat  
Дата: 08.02.12 11:40
Оценка: +6
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>вывод ? goto сила
А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
aquire resource

do something
if error goto release

do something else

release:
  release resource
Re[5]: готофобам к размышлению
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.02.12 11:53
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>сделал более детальное фильтрование


тогда уже

-P 'goto +[_0-9a-zA-Z_]+;'
Re[2]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 12:09
Оценка: -6 :))) :)
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>вывод ? goto сила
MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
MC>
MC>aquire resource

MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>


Это как раз пример того, что сттрого-настрого надо запрещать в коде!
Давайте рассмотрим ваше код.

do something
if error goto release


Обычно в начале каждой функции происходят различные проверки и запросы ресурсов, как, например, открытие файлов или выделение памяти под объекты и т.д.
Теперь представим, что ошибке в вашем коде не возникло, коогда вы делали something. значит вы продолжаете делать уже что-то другое. Получается код втда

do something
if error goto release

do something_another
if error goro // Куда goto&!!!


Так как вы уже успели затребовать новые ресурсы, то возникает вопрос, куда теперь надо передать управление в случае ошибки?

Значит следующий программист уже вынужден повторять за вами этот безграмотный код, так как уже существующий дизайн функции ему это диктует. В противном случае ему пришлось бы переписывать и ваш код. Значит следующий программист пишет

do something
if error goto release

do something_another
if error goro another_release


Наступает очередь третьего программиста. Его код успешно прошел все проверки и дошел до места после something и another_something. Он что-то делает в коде свое. Но ему также надо обработать ошибку. Перейти по существующим меткам он не может, так как оон уже затребовал новые ресурсы, а не используемые ресурсы, которые вы выделяли, уже подчистил. Значит они пишет такой код.

do something
if error goto release

do something_another
if error goro another_release

do something_else
if error goro else_release


Теперь задание дали четвертому программисту. надо вписать в эту функцию в определенное место некотурую функциональность. Это программист успешно ее вписывает, но у него возникает вопрос, а куда передать управление, если после выаолнения этой функциональности надо выйти из функции? И тут начинаются гадания! Этот программист плохо знает, что функция делает вцелом, так как для этого нужны знания по другим частям пронета. Тогда поразмысли, он вставляет переход на метку, которая ему кажется предпочтительной. Но, увы, он ошибся! Остался не освобожденный ресурс. Но программа-то при тестировании работает! И баг вскрывается только тогда, когда программу передают пользователю. Тогда ддля исправления бага дают поручение пятому программисту исправить его. А пятый программист хватается за голову от этого ужасного кода, так как, как говорится, без поллитра в нем не разберешься!

Когда я слышу от програмиста подобную фразу, что это "хороший способ подчистки", то делаю однозначный вывод, что этого программиста ни в коем случае нельзя брать в проект, так как оон "понадчистит", что потом придется ночами все исправлять!
Меня можно встретить на www.cpp.forum24.ru
Re[5]: готофобам к размышлению
От: Константин Россия  
Дата: 08.02.12 12:13
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>сделал более детальное фильтрование


J>
J>nt4 sources

J>$ grep -r --include=*.c -P 'goto (.+);' "C:/nt4"
J>result: 42538 goto

J>$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/nt4"
J>result: 8236 goto
J>


J>
J>win2k sources

J>$ grep -r --include=*.c -P 'goto (.+);' "C:/win2k"
J>result: 16523 goto

J>$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/win2k"
J>result: 23022 goto
J>


Не ожидал. Я еще понимаю в C, но в C++ goto практически бесполезен
Re: готофобам к размышлению
От: Sni4ok  
Дата: 08.02.12 12:15
Оценка: +2
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вывод ? goto сила


goto средство- как и нож, не более того, а фанатиков с фгм — в топку
Re[2]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 12:19
Оценка: :))
Здравствуйте, Mr.Cat, Вы писали:

MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:

MC>
MC>aquire resource

MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>


Я вспоминаю реальный случай в проекте. Когда был убран goto, посредством замены его структурной конструкцией, то сразу же обнаружидось, что этот код с goto сожержит по крайне мере три бага! Проблема была в том, что трудно было выделить тот код, который логически относился к тому фрагменту, которым управлял goto. То есть когда есть, например, конструкция с while, товы четко видите, где онаи начинается, и где она заканчивается. В отношении с goto это сказать нельзя. Нужно изучать код, прежде чем дать ответ на вопрос.
Меня можно встретить на www.cpp.forum24.ru
Re[2]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 12:22
Оценка: :))
Здравствуйте, Sni4ok, Вы писали:

S>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>вывод ? goto сила


S>goto средство- как и нож, не более того, а фанатиков с фгм — в топку



В жизни можно чего-то добиваться плохими средствами, а можно хорошими. Я предпочитаю хорошими.
Меня можно встретить на www.cpp.forum24.ru
Re[6]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 12:24
Оценка:
Здравствуйте, Константин, Вы писали:

К>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>сделал более детальное фильтрование


J>>
J>>nt4 sources

J>>$ grep -r --include=*.c -P 'goto (.+);' "C:/nt4"
J>>result: 42538 goto

J>>$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/nt4"
J>>result: 8236 goto
J>>


J>>
J>>win2k sources

J>>$ grep -r --include=*.c -P 'goto (.+);' "C:/win2k"
J>>result: 16523 goto

J>>$ grep -r --include=*.{cpp,cxx,cc} -P 'goto (.+);' "C:/win2k"
J>>result: 23022 goto
J>>


К>Не ожидал. Я еще понимаю в C, но в C++ goto практически бесполезен


Практическое применение при желании можно найти, но это говорит о том, что человек ничего не понимает в ООП.
Меня можно встретить на www.cpp.forum24.ru
Re[3]: готофобам к размышлению
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.02.12 12:31
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Когда я слышу от програмиста подобную фразу, что это "хороший способ подчистки", то делаю однозначный вывод, что этого программиста ни в коем случае нельзя брать в проект, так как оон "понадчистит", что потом придется ночами все исправлять!


А как иначе сделать без оверхида? Не скажу, что такой код прямо лучше

  /* code */

  r1 = alloc_resource1();
  if (error) 
  {
    return FAIL;
  }

  /* code */

  r2 = alloc_resource2();
  if (error)
  {
    free_resource(r1);
    return FAIL;
  }   
 
  /* code */

  r3 = alloc_resource3();
  if (error)
  {
    free_resource(r2);
    free_resource(r1);
    return FAIL;
  }   

  /* code */

  free_resource(r3);
  free_resource(r2);
  free_resource(r1);
  return OK;
Re[3]: готофобам к размышлению
От: Sni4ok  
Дата: 08.02.12 12:42
Оценка: +2 :)))
Здравствуйте, Сыроежка, Вы писали:

С>В жизни можно чего-то добиваться плохими средствами, а можно хорошими. Я предпочитаю хорошими.


как-то вы так хорошо свяазали goto с успехами в жизни, и как успех уже близок?
Re[3]: готофобам к размышлению
От: DarkTranquillity  
Дата: 08.02.12 12:58
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, Sni4ok, Вы писали:


S>>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>>вывод ? goto сила


S>>goto средство- как и нож, не более того, а фанатиков с фгм — в топку



С>В жизни можно чего-то добиваться плохими средствами, а можно хорошими. Я предпочитаю хорошими.


Уважаемый, ну может все же снизойдете и дадите хотя бы намек, как же в С (не С++) "изящно" освобождать ресурсы?
А насчет 1-2-3 программист пришел поставил "гоуту не туда" — нефиг катать функции листингом как все исходники Винды. Тогда и goto дам будет адын.
Re[4]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 13:08
Оценка: -5 :))
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, Сыроежка, Вы писали:


С>>Когда я слышу от програмиста подобную фразу, что это "хороший способ подчистки", то делаю однозначный вывод, что этого программиста ни в коем случае нельзя брать в проект, так как оон "понадчистит", что потом придется ночами все исправлять!


M>А как иначе сделать без оверхида? Не скажу, что такой код прямо лучше


M>
M>  /* code */

M>  r1 = alloc_resource1();
M>  if (error) 
M>  {
M>    return FAIL;
M>  }

M>  /* code */

M>  r2 = alloc_resource2();
M>  if (error)
M>  {
M>    free_resource(r1);
M>    return FAIL;
M>  }   
 
M>  /* code */

M>  r3 = alloc_resource3();
M>  if (error)
M>  {
M>    free_resource(r2);
M>    free_resource(r1);
M>    return FAIL;
M>  }   

M>  /* code */

M>  free_resource(r3);
M>  free_resource(r2);
M>  free_resource(r1);
M>  return OK;
M>


В общем случае этот подход значительно лучше. То есть вы знаете. если условие не выполнено, то вам не надо просматривать всю функцию до ее завершения. А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, оон может освободить resurce2. То есть вступает в игру ООП.
Проблема с goto помимо прочих недостатков заключается в том, что другие программисты уже должны подчиняться этому дизайну и вставлять свои goto в тело функции. В противном случае либо надо целиком пересматривать дизайн функции, лиюо начнется дублирование кода, и функция будет разрастаться.
Меня можно встретить на www.cpp.forum24.ru
Re[5]: готофобам к размышлению
От: DarkTranquillity  
Дата: 08.02.12 13:40
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, Mystic, Вы писали:


> ... skip


M>>А как иначе сделать без оверхида? Не скажу, что такой код прямо лучше


M>>
M>>  /* code */

M>>  r1 = alloc_resource1();
M>>  if (error) 
M>>  {
M>>    return FAIL;
M>>  }

M>>  /* code */

M>>  r2 = alloc_resource2();
M>>  if (error)
M>>  {
M>>    free_resource(r1);
M>>    return FAIL;
M>>  }   
 
M>>  /* code */

M>>  r3 = alloc_resource3();
M>>  if (error)
M>>  {
M>>    free_resource(r2);
M>>    free_resource(r1);
M>>    return FAIL;
M>>  }   

M>>  /* code */

M>>  free_resource(r3);
M>>  free_resource(r2);
M>>  free_resource(r1);
M>>  return OK;
M>>


С>В общем случае этот подход значительно лучше. То есть вы знаете. если условие не выполнено, то вам не надо просматривать всю функцию до ее завершения. А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, оон может освободить resurce2. То есть вступает в игру ООП.

Вы знаете, на ... вертеть такой "мощный" выход "ООП" на арену.
Re[4]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 13:54
Оценка: -1
Здравствуйте, DarkTranquillity, Вы писали:

DT>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, Sni4ok, Вы писали:


S>>>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>>>вывод ? goto сила


S>>>goto средство- как и нож, не более того, а фанатиков с фгм — в топку



С>>В жизни можно чего-то добиваться плохими средствами, а можно хорошими. Я предпочитаю хорошими.


DT>Уважаемый, ну может все же снизойдете и дадите хотя бы намек, как же в С (не С++) "изящно" освобождать ресурсы?

DT>А насчет 1-2-3 программист пришел поставил "гоуту не туда" — нефиг катать функции листингом как все исходники Винды. Тогда и goto дам будет адын.

Из вашего сообщения можно лишь сделать однозначный вывод, что вы в крупных проектах не работали. Так, пишите какой-то местечковый код, а потому и мировоззрение в программировании у вас крайне ограниченное.
Чтобы вам было понятно насчет "катать функции", то я вам скажу, что в проектах бывает около тысячи модулей. Проект с общим числом около 400-500 модуллей считается маленьким для софтверных компаний. проектам обычно десять а то и более лет. За это время выпустилось уже с десяток релизов проекта. Одну и ту же функцию могут писать и модифицировать за время существования проекта человек тридцать. причем даже одна строчка в функции может меняться по десять раз. Более того многие из программистов, которые модифицировали функцию даже толком сказать не в состоянии, что она делает. Чтобы было понятно, то, допустим, заказчик присылает сообщение об ошибке, а вмесет с ним либо журнал ошибок, либо дамп памяти. Начинается анализ дампа. Находится место ошибки на уровне ассемблерного кода. находите функцию, которой принадлежит этот ассемблерный код. И начинаете анализировать тот фрагмент кода, а не всю функцию, которое стало причиной ошибки. исправляете его. В итоге получается код, в котором заплата нашита на заплату, так как нет средств и возможностей переписать функцию заново. Это можно сделать лишь в плановом порядке, когда будет делаться следующий релиз, и так повезет, что эта функция войдет в перечень тех функций, которые нужно модифицировать. Многие программисты увольняются, многие поступают на работу и, практически, ни один человек не значет всех тонкостей проекта. Есть лишь отдельные люди, которые отвечают за некоторую логику проекта и проектировщики, которые код не знают, но зато знают структуру проекта и взаимосвязи между частями на логическом уровне.

Что касается примеров, как исправить код с goto, то таких примеров у меня много. Но это надо проводить целую лекцию: брать из проекта примеры кода с goto, показывать их недостатки, и как они теперь выглядят без gotо.
онимание этого как раз и определяет квалификацию программиста. А если возникают вопросы, то значит вам следует набираться опыта и повышать свою квалификацию.

Что касается языка С, то вы наверное даже и не догадываетесь, что на нем можно и не только можно, а просто нужно писать объектно-ориентированные программы. Потому что объектно-оирентированное программирование — это стиль программирования, а не технические средства. Технические средства лишь помогают вам более наглядно выразить этот стиль.
Что такое объектно-ориентированное программирование? Оно базируется на двух принципах. Первое — на построение абстракций, то есть от перехода от частного к общему и обобщеннному. Второе — каждый код должен отвечать за то, в чем ему предоставлены полномочия и компетенция.
На С это легко нарушить, так как средства инкапусляции, средства доступа, средства полиморфизма крайне ограничены. И многие программисты на С, которые не встречают преград со стороны языка часто не просто нарушают эти принципы, а даже не догадываются о них. Поэтому очень часто клиентский код лезет в реализацию серверного кода, удаляет ресурсы тот код, который не имеет компетенции это делать, реализация одной абстракции размазана по различным частям кода, что эхту абстракцию трудно выделить и увидеть. В том числе и используют goto, так как так "проще". Все это оборачивается плохим плохочитаемым кодом с многочисленными багами и непонятной логикой.

Мой вам совет: пишите на С в объектно-ориентированном стиле, и тогда у вас подобных вопросов даже не возникнет!
Меня можно встретить на www.cpp.forum24.ru
Re[5]: готофобам к размышлению
От: k.o. Россия  
Дата: 08.02.12 14:07
Оценка: 1 (1)
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, Mystic, Вы писали:


M>>Здравствуйте, Сыроежка, Вы писали:


С>>>Когда я слышу от програмиста подобную фразу, что это "хороший способ подчистки", то делаю однозначный вывод, что этого программиста ни в коем случае нельзя брать в проект, так как оон "понадчистит", что потом придется ночами все исправлять!


M>>А как иначе сделать без оверхида? Не скажу, что такой код прямо лучше


С>В общем случае этот подход значительно лучше. То есть вы знаете. если условие не выполнено, то вам не надо просматривать всю функцию до ее завершения. А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, оон может освободить resurce2. То есть вступает в игру ООП.


При последовательном применении идиомы 'goto cleanup' просматривать всю функцию точно также нет необходимости. А где Вы увидели зависимости между ресурсами вообще непонятно, во всяком случае, в приведенном фрагменте кода их нет, также как и ООП.

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


феерично. Добавил выделение, для тех, кто в танке не заметил дублирования кода в варианте без goto.
  Скрытый текст
M>>
M>>  /* code */

M>>  r1 = alloc_resource1();
M>>  if (error) 
M>>  {
M>>    return FAIL;
M>>  }

M>>  /* code */

M>>  r2 = alloc_resource2();
M>>  if (error)
M>>  {
M>>    free_resource(r1);
M>>    return FAIL;
M>>  }   
 
M>>  /* code */

M>>  r3 = alloc_resource3();
M>>  if (error)
M>>  {
M>>    free_resource(r2);
M>>    free_resource(r1);
M>>    return FAIL;
M>>  }   

M>>  /* code */

M>>  free_resource(r3);
M>>  free_resource(r2);
M>>  free_resource(r1);
M>>  return OK;
M>>


Ниже пример смешивания подходов без пересмотра дизайна функции, дублирование кода, присущее подходу без goto, разумеется осталось.
  Скрытый текст
  /* code */

  r1 = alloc_resource1();
  if (error) 
  {
    result = FAIL;
    goto cleanup;
  }

  /* code */

  r2 = alloc_resource2();
  if (error) 
  {
    result = FAIL;
    goto cleanup;
  }
 
  /* code */

  r3 = alloc_resource3();
  if (error) 
  {
    free_resource(r2);
    free_resource(r1);
    return FAIL;
  }

  /* code */

  result = OK;

cleanup:
  free_resource(r3);
  free_resource(r2);
  free_resource(r1);

  return result;


Итого, чуть менее чем всё Вами сказанное, действительности не соответствует.
Re[5]: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 14:08
Оценка:
Здравствуйте, Сыроежка, Вы писали:

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

Как интересно, в описании алгоритма, значит, слово goto упрощает, а в коде нет?

С>А самое главное — не надо наивно думать, что в софтверных фирмах работают высококвалифицированные программисты. Высококвалифицированные программисты — это небольшая прослойка. А в основном в проектах участвуют, как я их называю, пофигисты, которые пишут по принципу "тяп-ляп" — лишь бы работало.


Винда -- это весьма успешный проект, с очень многолетней историей развития и успешной историей поддержки. И goto им не помешал... А есть просто куча мегаверно написанного кода, который умер не родившись...
И это таки повод задуматься о верности своих идеалов
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 14:13
Оценка:
Здравствуйте, Сыроежка, Вы писали:

а потому и мировоззрение в программировании у вас крайне ограниченное.


"Критикуя, критикуй мнение, а не его автора." Леонардо да Винчи

Re[3]: готофобам к размышлению
От: k.o. Россия  
Дата: 08.02.12 14:13
Оценка: +1
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, Mr.Cat, Вы писали:


MC>>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>>вывод ? goto сила
MC>>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:

С>Теперь представим, что ошибке в вашем коде не возникло, коогда вы делали something. значит вы продолжаете делать уже что-то другое. Получается код втда


С>do something

С>if error goto release

С>do something_another

С>if error goro // Куда goto&!!!


С>Так как вы уже успели затребовать новые ресурсы, то возникает вопрос, куда теперь надо передать управление в случае ошибки?


Туда же куда и раньше: goto release. Соответственно, последующий вывод и всё остальное неверно.
Re[5]: готофобам к размышлению
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.02.12 14:20
Оценка: +2
Здравствуйте, Сыроежка, Вы писали:

С>А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, он может освободить resurce2. То есть вступает в игру ООП.


Не приведи господь работать с таким кодом
Re[6]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 14:43
Оценка: :))
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Сыроежка, Вы писали:


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

E>Как интересно, в описании алгоритма, значит, слово goto упрощает, а в коде нет?

Описание алгоритма — это несколько иное. Там нет деталей. Там может быть просто фраза, "если что-то не выполнилось, то переходим (или идем, или вообще просто goto to #3) к другому пункту". Или "если это не выполнилсоь, то идем на начало". Но "идием на начало" — это совершенно не означает, что используемп goto. Для программиста это может означать, что используется while, for или do-while.


С>>А самое главное — не надо наивно думать, что в софтверных фирмах работают высококвалифицированные программисты. Высококвалифицированные программисты — это небольшая прослойка. А в основном в проектах участвуют, как я их называю, пофигисты, которые пишут по принципу "тяп-ляп" — лишь бы работало.


E>Винда -- это весьма успешный проект, с очень многолетней историей развития и успешной историей поддержки. И goto им не помешал... А есть просто куча мегаверно написанного кода, который умер не родившись...

E>И это таки повод задуматься о верности своих идеалов

У вас с логикой проблемы. То, что проект успешный, еще не означает, что goto им не мешал! Может быть как раз очень даже мешал! Возьмите для примера MS VC++ 2010. Там столько багов, что мало не покажется. И почему вы так уверенно считаете, что причиной этих багов не является goto, если там таковые имеются?!

Что касается хорошего кода, который "умер, не родившись", то это совершенно не связано с тем, что хороший код мешал развитию проекта. Хорошему проекту мешает сомнительная логика, которая имеется в ваших рассуждениях.
Меня можно встретить на www.cpp.forum24.ru
Re[6]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 15:03
Оценка: -1 :)
Здравствуйте, k.o., Вы писали:

KO>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, Mystic, Вы писали:


M>>>Здравствуйте, Сыроежка, Вы писали:


С>>>>Когда я слышу от програмиста подобную фразу, что это "хороший способ подчистки", то делаю однозначный вывод, что этого программиста ни в коем случае нельзя брать в проект, так как оон "понадчистит", что потом придется ночами все исправлять!


M>>>А как иначе сделать без оверхида? Не скажу, что такой код прямо лучше


С>>В общем случае этот подход значительно лучше. То есть вы знаете. если условие не выполнено, то вам не надо просматривать всю функцию до ее завершения. А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, оон может освободить resurce2. То есть вступает в игру ООП.


KO>При последовательном применении идиомы 'goto cleanup' просматривать всю функцию точно также нет необходимости. А где Вы увидели зависимости между ресурсами вообще непонятно, во всяком случае, в приведенном фрагменте кода их нет, также как и ООП.


При "последовательном применении "goto cltanup" вы только последовательно пичкаете вашу программу операторами goto и принуждаете других программистов использовать goto, так как им уже без этого не обойтись благодаря вашей плохой структуре программы. Это всего лишь последовательное ухудшение дизайна функции.

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


KO>феерично. Добавил выделение, для тех, кто в танке не заметил дублирования кода в варианте без goto.


Так это и говорит, что вы не понимаете, о чем идет речь. В этом и проблема всех начинающих программистов: крайне местечковое мировоззрение. Дело в том, что если при вашей структцуре функции с goto человек начент писать в объектно-ориентированном стиле, то без ваших goto, то ему придется либо переписывать всю функцию заново, либо дуюлировать код. либо есть третий вариант, о котором я уже постоянно вам втолковую, писать свои goto.

KO>
  Скрытый текст
M>>>
M>>>  /* code */

M>>>  r1 = alloc_resource1();
M>>>  if (error) 
M>>>  {
M>>>    return FAIL;
M>>>  }

M>>>  /* code */

M>>>  r2 = alloc_resource2();
M>>>  if (error)
M>>>  {
M>>>    free_resource(r1);
M>>>    return FAIL;
M>>>  }   
 
M>>>  /* code */

M>>>  r3 = alloc_resource3();
M>>>  if (error)
M>>>  {
M>>>    free_resource(r2);
M>>>    free_resource(r1);
M>>>    return FAIL;
M>>>  }   

M>>>  /* code */

M>>>  free_resource(r3);
M>>>  free_resource(r2);
M>>>  free_resource(r1);
M>>>  return OK;
M>>>



KO>Ниже пример смешивания подходов без пересмотра дизайна функции, дублирование кода, присущее подходу без goto, разумеется осталось.

KO>
  Скрытый текст
KO>
KO>  /* code */

KO>  r1 = alloc_resource1();
KO>  if (error) 
KO>  {
KO>    result = FAIL;
KO>    goto cleanup;
KO>  }

KO>  /* code */

KO>  r2 = alloc_resource2();
KO>  if (error) 
KO>  {
KO>    result = FAIL;
KO>    goto cleanup;
KO>  }
 
KO>  /* code */

KO>  r3 = alloc_resource3();
KO>  if (error) 
KO>  {
KO>    free_resource(r2);
KO>    free_resource(r1);
KO>    return FAIL;
KO>  }

KO>  /* code */

KO>  result = OK;

KO>cleanup:
KO>  free_resource(r3);
KO>  free_resource(r2);
KO>  free_resource(r1);

KO>  return result;
KO>



KO>Итого, чуть менее чем всё Вами сказанное, действительности не соответствует.


Не смешите. О какой действительности вы говорите? О том, что вы не умете писать программы в объектно-ориентированном стиле?
Вы наивно наверное думаете, что я, когда пишу программу, только тем и озабочен, как искусственно обойтись без goto. Я вас уверяю, что это уже у меня мышление программиста такое, что я себя не насилую, а изначально мысли в идиомах структурного и объектно-ориентированного программирования.

То, что вы тут начинаете заниматься демагогией, это уже давно в истории программирования пройденный этап. Но всегда появляются люди с недостаточной квалификацией, которые начинают этот путь проходить заново. Таков общий путь развития познания. Образно говоря, сначала люди видят, что Солнце встает и закаьтывается, а потому с пеной у рта доказывают, что Солнце вертется вокруг Земли. Нужно еще приобрести много знаний, чтобы понять, что это Земля вертится вокруг Солнца, а не наоборот. То же самое и в программировании. Человек, освоивший оператор goto, и не мыслящий в объектно-ориентированном стиле, будет с пеной у рта доказывать, насколько хорош goto. И ему бесполезно что-то объяснять, пока он не подымется на новую ступень познания. Все приходит с опытом и со знаниемями. Некоторые правда так и остаются на уровне идиомы goto всю свою профессиональную жизнь.
Меня можно встретить на www.cpp.forum24.ru
Re[4]: готофобам к размышлению
От: Сыроежка  
Дата: 08.02.12 15:05
Оценка:
Здравствуйте, k.o., Вы писали:

KO>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, Mr.Cat, Вы писали:


MC>>>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>>>вывод ? goto сила
MC>>>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:

С>>Теперь представим, что ошибке в вашем коде не возникло, коогда вы делали something. значит вы продолжаете делать уже что-то другое. Получается код втда


С>>do something

С>>if error goto release

С>>do something_another

С>>if error goro // Куда goto&!!!


С>>Так как вы уже успели затребовать новые ресурсы, то возникает вопрос, куда теперь надо передать управление в случае ошибки?


KO>Туда же куда и раньше: goto release. Соответственно, последующий вывод и всё остальное неверно.



Забавно! А там снова надо делать теже самые проверки и осуществлять переход. Получается замкнутый круг. То есть вы просто из одного места goto перенесли в другое место.
Меня можно встретить на www.cpp.forum24.ru
Re[5]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 15:17
Оценка:

"Бездельника хлебом не корми, а дай порассуждать, да и в умении очернить других ему не откажешь. Он всегда готов найти оправдание собственной никчёмности." Леонардо да Винчи

Re[7]: готофобам к размышлению
От: B0FEE664  
Дата: 08.02.12 15:38
Оценка: +1 :)
Здравствуйте, Сыроежка, Вы писали:

KO>>Итого, чуть менее чем всё Вами сказанное, действительности не соответствует.

С>Не смешите. О какой действительности вы говорите? О том, что вы не умете писать программы в объектно-ориентированном стиле?

Речь идёт о действительности, в которой существует такая компания как Microsoft. Я вам напомню, село Редмонд с населением 45256 человек, западное побережье одного северного континента. Там пишут вполне местечковый код. Про объектно-ориентированный стиль видимо не знают, так как часто используют goto.
И каждый день — без права на ошибку...
Re[7]: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 16:59
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Описание алгоритма — это несколько иное. Там нет деталей. Там может быть просто фраза, "если что-то не выполнилось, то переходим (или идем, или вообще просто goto to #3) к другому пункту". Или "если это не выполнилсоь, то идем на начало". Но "идием на начало" — это совершенно не означает, что используемп goto. Для программиста это может означать, что используется while, for или do-while.


Я, всё-таки, скромно надеюсь, что в коде винды на английском, а там "идём туда-то" пишут таки с пробелом: "go to tudato"...

С>У вас с логикой проблемы. То, что проект успешный, еще не означает, что goto им не мешал! Может быть как раз очень даже мешал! Возьмите для примера MS VC++ 2010. Там столько багов, что мало не покажется. И почему вы так уверенно считаете, что причиной этих багов не является goto, если там таковые имеются?!


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

С>Что касается хорошего кода, который "умер, не родившись", то это совершенно не связано с тем, что хороший код мешал развитию проекта. Хорошему проекту мешает сомнительная логика, которая имеется в ваших рассуждениях.

Мои проекты пока живут...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: готофобам к размышлению
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 08.02.12 17:15
Оценка: +1
Значительная часть винды написана на C. Для C goto — единственный способ обеспечить cleanup.
Для C и C++ goto — единственный способ выйти из вложенного цикла (кроме функций, плодить которые в ряде случаев совсем не хочется).
Re[7]: готофобам к размышлению
От: k.o. Россия  
Дата: 08.02.12 17:27
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>>>В общем случае этот подход значительно лучше. То есть вы знаете. если условие не выполнено, то вам не надо просматривать всю функцию до ее завершения. А самое главное — этот код поддается улучшению, так как сами ресурсы могут управлять освобожлением других ресурсов, если им самим не удалось создаться. например, resource3 из вашего примера знает, что его можно выделять лишь при условии, что уже выдеен resource2, а потому при своем неуспехи, оон может освободить resurce2. То есть вступает в игру ООП.


KO>>При последовательном применении идиомы 'goto cleanup' просматривать всю функцию точно также нет необходимости. А где Вы увидели зависимости между ресурсами вообще непонятно, во всяком случае, в приведенном фрагменте кода их нет, также как и ООП.


С>При "последовательном применении "goto cltanup" вы только последовательно пичкаете вашу программу операторами goto и принуждаете других программистов использовать goto, так как им уже без этого не обойтись благодаря вашей плохой структуре программы. Это всего лишь последовательное ухудшение дизайна функции.


Аргументов мы от Вас не дождёмся? goto использовать плохо потому, что это плохо, да?

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


KO>>феерично. Добавил выделение, для тех, кто в танке не заметил дублирования кода в варианте без goto.


С>Так это и говорит, что вы не понимаете, о чем идет речь. В этом и проблема всех начинающих программистов: крайне местечковое мировоззрение. Дело в том, что если при вашей структцуре функции с goto человек начент писать в объектно-ориентированном стиле, то без ваших goto, то ему придется либо переписывать всю функцию заново, либо дуюлировать код. либо есть третий вариант, о котором я уже постоянно вам втолковую, писать свои goto.


Как я уже продемонстрировал, моя структура функции, не требует от других использовать goto. И не надо ничего втолковывать, просто покажите код.

KO>>
  Скрытый текст
M>>>>
M>>>>  /* code */

M>>>>  r1 = alloc_resource1();
M>>>>  if (error) 
M>>>>  {
M>>>>    return FAIL;
M>>>>  }

M>>>>  /* code */

M>>>>  r2 = alloc_resource2();
M>>>>  if (error)
M>>>>  {
M>>>>    free_resource(r1);
M>>>>    return FAIL;
M>>>>  }   
 
M>>>>  /* code */

M>>>>  r3 = alloc_resource3();
M>>>>  if (error)
M>>>>  {
M>>>>    free_resource(r2);
M>>>>    free_resource(r1);
M>>>>    return FAIL;
M>>>>  }   

M>>>>  /* code */

M>>>>  free_resource(r3);
M>>>>  free_resource(r2);
M>>>>  free_resource(r1);
M>>>>  return OK;
M>>>>



KO>>Итого, чуть менее чем всё Вами сказанное, действительности не соответствует.


С>Не смешите. О какой действительности вы говорите? О том, что вы не умете писать программы в объектно-ориентированном стиле?


Переходим на личности, сударь? Так бы прямо и написали, что обоснования Вашей точки зрения у Вас нет.

С>Вы наивно наверное думаете, что я, когда пишу программу, только тем и озабочен, как искусственно обойтись без goto. Я вас уверяю, что это уже у меня мышление программиста такое, что я себя не насилую, а изначально мысли в идиомах структурного и объектно-ориентированного программирования.


С>То, что вы тут начинаете заниматься демагогией, это уже давно в истории программирования пройденный этап. Но всегда появляются люди с недостаточной квалификацией, которые начинают этот путь проходить заново. Таков общий путь развития познания. Образно говоря, сначала люди видят, что Солнце встает и закаьтывается, а потому с пеной у рта доказывают, что Солнце вертется вокруг Земли. Нужно еще приобрести много знаний, чтобы понять, что это Земля вертится вокруг Солнца, а не наоборот. То же самое и в программировании. Человек, освоивший оператор goto, и не мыслящий в объектно-ориентированном стиле, будет с пеной у рта доказывать, насколько хорош goto. И ему бесполезно что-то объяснять, пока он не подымется на новую ступень познания. Все приходит с опытом и со знаниемями. Некоторые правда так и остаются на уровне идиомы goto всю свою профессиональную жизнь.


Правильно, не надо с пеной у рта ничего доказывать, просто продемонстрируйте нам как этот код должен выглядеть в "объектно-ориентированном стиле". Меньше слов больше кода.
Re[6]: готофобам к размышлению
От: Евгений Коробко  
Дата: 08.02.12 18:55
Оценка:
К>Не ожидал. Я еще понимаю в C, но в C++ goto практически бесполезен

Ответ тривиален. В рамках переезда с С на С++ берётся файл *.c и переименовывается в .cpp без изменения содержания. Так мозила делает, например.
Евгений Коробко
Re[5]: готофобам к размышлению
От: Евгений Коробко  
Дата: 08.02.12 19:03
Оценка: 1 (1) +4
С>В общем случае этот подход значительно лучше.

Офигеть, чем же он лучше?
Кстати, хочу напомнить, что в С переменные описываются в начале функции.


void* resource1 = NULL;
void* resource2 = NULL;
void* resource3 = NULL;
int result_error_code = 0;

...
if (!some_check1)) {
  result_error_code = 1;
  goto exit_label;
}
resource1 = malloc(100);

if (!some_check2()) {
  result_error_code = 2;
  goto exit_label;
}
resource2 = malloc(100);

if (!some_check3()) {
  result_error_code = 3;
  goto exit_label;
}
resource3 = malloc(100);

...
exit_label:
if (resource1) free(resource1);
if (resource2) free(resource2);
if (resource3) free(resource3);


Это, имхо, наилучшее решение задачи. Множественные выходы из функции без автоматического освобождения ресурсов — к беде.
Евгений Коробко
Re[6]: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 20:47
Оценка: +1
Здравствуйте, Евгений Коробко, Вы писали:

ЕК>Это, имхо, наилучшее решение задачи. Множественные выходы из функции без автоматического освобождения ресурсов — к беде.

+100!

Альтернаиива, собственно, только одна. В том редком случае, когда ресурс не указатель и просто так его не проинициализируешь и инициализированность не проверишь, делают как-то так:

ЕК>
ЕК>Resource1 resource1;
ЕК>Resource2 resource2;
ЕК>Resource3 resource3;
ЕК>int result_error_code = 0;

ЕК>...
ЕК>if( !initRes1(&resource1) ) {
ЕК>  result_error_code = 1;
ЕК>  goto exit_after_resource1;
ЕК>}

ЕК>if( !initRes2(&resource2) ) {
ЕК>  result_error_code = 2;
ЕК>  goto exit_after_resource2;
ЕК>}

ЕК>if( !initRes3(&resource3) ) {
ЕК>  result_error_code = 3;
ЕК>  goto exit_after_resource3;
ЕК>}


ЕК>...
ЕК>  freeRes3(&resource3);
ЕК>exit_after_resource3: 
ЕК>  freeRes2(&resource2);
ЕК>exit_after_resource2: 
ЕК>  freeRes1(&resource1);
EK>exit_after_resource1: ;
ЕК>
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 21:04
Оценка: +1 :)
реальная жизнь сурова

смотрите функцию copy_process

http://lxr.linux.no/#linux+v3.2.5/kernel/fork.c


bad_fork_free_pid:
        if (pid != &init_struct_pid)
                free_pid(pid);
bad_fork_cleanup_io:
        if (p->io_context)
                exit_io_context(p);
bad_fork_cleanup_namespaces:
        exit_task_namespaces(p);
bad_fork_cleanup_mm:
        if (p->mm)
                mmput(p->mm);
bad_fork_cleanup_signal:
        if (!(clone_flags & CLONE_THREAD))
                free_signal_struct(p->signal);
bad_fork_cleanup_sighand:
        __cleanup_sighand(p->sighand);
bad_fork_cleanup_fs:
        exit_fs(p); /* blocking */
bad_fork_cleanup_files:
        exit_files(p); /* blocking */
bad_fork_cleanup_semundo:
        exit_sem(p);
bad_fork_cleanup_audit:
        audit_free(p);
bad_fork_cleanup_policy:
        perf_event_free_task(p);
#ifdef CONFIG_NUMA
        mpol_put(p->mempolicy);
bad_fork_cleanup_cgroup:
#endif
        if (clone_flags & CLONE_THREAD)
                threadgroup_fork_read_unlock(current);
        cgroup_exit(p, cgroup_callbacks_done);
        delayacct_tsk_free(p);
        module_put(task_thread_info(p)->exec_domain->module);
bad_fork_cleanup_count:
        atomic_dec(&p->cred->user->processes);
        exit_creds(p);
bad_fork_free:
        free_task(p);
fork_out:
        return ERR_PTR(retval);
}
Re[8]: готофобам к размышлению
От: Erop Россия  
Дата: 08.02.12 21:53
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>реальная жизнь сурова


J>смотрите функцию copy_process


J>http://lxr.linux.no/#linux+v3.2.5/kernel/fork.c


И что тут не прнятно?..

Думаешь с флажками или с дублированием очистки на каждый выход, было бы лучше?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: готофобам к размышлению
От: Cyberax Марс  
Дата: 08.02.12 22:15
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>реальная жизнь сурова

J>смотрите функцию copy_process

Придраться можно только вот к этому куску:
J>
J>bad_fork_cleanup_policy:
J>        perf_event_free_task(p);
J>#ifdef CONFIG_NUMA
J>        mpol_put(p->mempolicy);
J>bad_fork_cleanup_cgroup:
J>#endif
J>        if (clone_flags & CLONE_THREAD)
J>                threadgroup_fork_read_unlock(current);
J>        cgroup_exit(p, cgroup_callbacks_done);
J>        delayacct_tsk_free(p);
J>        module_put(task_thread_info(p)->exec_domain->module);
J>


Остальное всё вполне понятно, типичный паттерн "goto cleanup", просто громоздкий.
Sapienti sat!
Re[9]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 08.02.12 22:22
Оценка: +2
Здравствуйте, Erop, Вы писали:

E>И что тут не прнятно?..


E>Думаешь с флажками или с дублированием очистки на каждый выход, было бы лучше?


да я как бы за goto просто пример из реальной жизни я к тому что как сильно это расходится с заявлениями некоторых типа "юзает goto значит не умеет по другому" стоить еще учесть раньше оптимизаторы не такие крутые были и реально может код выигрывал по скорости от такой организации а так то конечно можно было бы наверное разбить на десяток функций и почти избавиться от всех goto но во первых когда этот код писался отимизаторы были не такие крутые а во вторых разбиение одной задачи на десять подзадач только усложнит понимание
Re: готофобам к размышлению
От: Flying Dutchman Украина  
Дата: 08.02.12 22:29
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Всем привет


J>инструменты:


J>шелл Cygwin Terminal из пакета Cygwin

J>утилита grep из пакета Cygwin

J>(кстати рекомендую всем у кого еще не установлен пакет Cygwin обязательно поставить получите юникс шелл и юникс утилиты)


J>жертва сорцы nt4


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/nt4"
J>result: 54760 goto
J>


J>жертва сорцы win2k


J>запускаем

J>
J>$ grep -r --include=*.{c,cpp,cxx,cc,h,hpp,hxx} 'goto' "C:/win2k"
J>result: 40460 goto
J>


J>вывод ? goto сила


А сколько goto из этого числа входят в состав кода, сгенерированного YACC ?
Re: готофобам к размышлению
От: TimurSPB Интернет  
Дата: 08.02.12 22:37
Оценка: +1 -2
J>вывод ? goto сила
Сила. Но сила эта слабеет. Человеку с внутренней дисциплиной не подобает писать код с goto
Make flame.politics Great Again!
Re: готофобам к размышлению
От: landerhigh Пират  
Дата: 08.02.12 23:26
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вывод ? goto сила



grep -e "Jump off the cliff" 1_million_lemmings


Ну ты понял, да?
www.blinnov.com
Re[2]: готофобам к размышлению
От: quwy  
Дата: 08.02.12 23:58
Оценка: -1 :)
Здравствуйте, Eye of Hell, Вы писали:

EOH>Для C и C++ goto — единственный способ выйти из вложенного цикла (кроме функций, плодить которые в ряде случаев совсем не хочется).

Нормальные люди из вложенных циклов выходят по условиям, ибо даже break/continue -- это тот же goto.
Re: готофобам к размышлению
От: maykie Россия  
Дата: 09.02.12 03:50
Оценка: 2 (1) +4
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Всем привет


J>вывод ? goto сила


Всё дело в том, что большая часть готофобов стала таковой из-за Дейкстры с его goto considered harmful. Правда дальше названия они ниасилили, так как там много букв и стиль текста сложный — иначе бы они поняли что не всякий goto плох. В частности goto considered harmful не относится к break, continue и cleanup'ам так как их использование не усложняет поиск "meaningful set of coordinates" и не является "The unbridled use of the go to statement".


Для сравнения, PR команда лиспа вместо неудобочитаемых текстов использует красочные обложки(SICP) и даже пляшущих девочек(http://lambda.bugyo.tk/cdr/mwl/) и как результат — фанклуб у лиспа гораздо более развит чем у гото.
Re[8]: готофобам к размышлению
От: Трурль  
Дата: 09.02.12 05:01
Оценка: :))) :)
Здравствуйте, B0FEE664, Вы писали:

BFE>Я вам напомню, село Редмонд с населением 45256 человек, западное побережье одного северного континента.

Наверняка, кода писали винду, там жило 40460 человек.
Re[3]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 05:40
Оценка: 3 (1) +2
Здравствуйте, quwy, Вы писали:

Q>Здравствуйте, Eye of Hell, Вы писали:


EOH>>Для C и C++ goto — единственный способ выйти из вложенного цикла (кроме функций, плодить которые в ряде случаев совсем не хочется).

Q>Нормальные люди из вложенных циклов выходят по условиям, ибо даже break/continue -- это тот же goto.

э-э-э... даешь мастер-класс?
for() {
  ...
  for() {
    ...
    for() {
      ...
      if (condition1) goto out;
      ...
      if (condition2) goto out;
      ...
    }
    ...
  }
  ...
}
out:

Продемонстрируешь, как "нормальные люди выходят по условиям" из таких вложенных циклов? (многоточия — это значимый код)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: готофобам к размышлению
От: Programador  
Дата: 09.02.12 06:12
Оценка:
У меня в текущем проекте 1 гото, он в матеметике. Остальное ГУИ там вообще не надо думать про структуру отдельной функции, правда вот где ловить какое нибудь событие это загадка, иногда приходится выискивать по форумам ибо из документации не следует. Дело все в том как видит человек алгоритм. Ведь может увидеть не только скипы назад, но и вперед откатится к новой попытке.
....
l1:
....
l2:
....
if() goto l1;
....
if() goto l2;
.....

или в виндовс такие алгоритмы что писатели их так увидели или мозги у этих писателей такие были .

Дейстра доказал что можно без гото. Это великая теорема структурного программирования, вроде недавно ктото спрашивал про нее. И тогда начинали писать структуратор, незнаю есть ли гденибудь сейчас готовый. Алгоритм такой
1 — заменяем switch() на if()
2 — заменяем циклы на if() goto;
3 — заменяем if на if() goto;
После этого только if() goto остались
4 — заменяем if() goto Lx; на variant=()?PC+1:Lx; break;
5 — рекомендуется перетасовать полученные секции как следует.
6 — вся программу преобразуем к одному
for(;;)
switch(variant)
{  ....
  case N:
   ....
   variant= ;
   break;
  case N:
   ....
   variant= ;
   break;
}

нето что вложенные if() не нужны if вообще не нужны как и гото. Вложенные циклы тоже не нужны.
Re[2]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 12:19
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:


MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:

MC>
MC>aquire resource

MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>


Вот такой вот C маст дай.
Сало Украине, Героям Сала
Re[4]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 12:22
Оценка: -3 :)
Здравствуйте, jazzer, Вы писали:

Нормальные люди заворачивают эту кашу в отдельную функцию, и выходятъ по ретурну из вложенного цылка.
Сало Украине, Героям Сала
Re[5]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 13:31
Оценка: +1
Здравствуйте, vpchelko, Вы писали:

V>Здравствуйте, jazzer, Вы писали:


V>Нормальные люди заворачивают эту кашу в отдельную функцию, и выходятъ по ретурну из вложенного цылка.


особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: готофобам к размышлению
От: Erop Россия  
Дата: 09.02.12 13:31
Оценка: +2 -1
Здравствуйте, TimurSPB, Вы писали:

TSP>Сила. Но сила эта слабеет. Человеку с внутренней дисциплиной не подобает писать код с goto


Не. Человеку с внутренней дисциплиной не подобает писать непонятные, трудноподдерживаемые программы. А goto--это мелочи. IMHO, злоупотребление наймспейсами внесло в дело запуьывания кода, намного больший вклад. Я уже не говорю о макросах и шаблонах
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 13:43
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.


Я не знаю и знать не хочу такие функции. Если есть логически связанный набор переменных — их заворачивают в структуру. Если они не связаны логически , то нехрен им делать в одной функции.
Сало Украине, Героям Сала
Re[6]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 13:44
Оценка: -2 :)
Здравствуйте, jazzer, Вы писали:

J>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.


Это уже говнокод
Сало Украине, Героям Сала
Re[4]: готофобам к размышлению
От: quwy  
Дата: 09.02.12 14:34
Оценка:
Здравствуйте, jazzer, Вы писали:

J>э-э-э... даешь мастер-класс?

Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку:
for(i = 0; i < 10 && !stop; ++i)
Re[7]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 14:40
Оценка: 2 (2) +6
Здравствуйте, vpchelko, Вы писали:

V>Здравствуйте, jazzer, Вы писали:


J>>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.


V>Я не знаю и знать не хочу такие функции. Если есть логически связанный набор переменных — их заворачивают в структуру. Если они не связаны логически , то нехрен им делать в одной функции.


Сколько трудов и пафоса, и все только ради того, чтоб избавиться от goto (который тут совершенно к месту, ибо нет другого способа в языке для выхода из нескольких уровней циклов). Готофобия в чистом виде.

Я даже боюсь себе представить, как будет выглядеть какой-нть вычислительный алгоритм (пуассон/лаплас на конечных элементах, скажем) в твоем исполнении Каждая пара циклов отдельной функцией, все данные, с которыми цикл работает — отдельной структурой, поскольку разным циклам нужно слегка разное, надо еще иерархию этих структур заделать и паттерн позаковыристее применить... Не, чур меня, а то не засну потом...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 15:11
Оценка:
Здравствуйте, quwy, Вы писали:

Q>Здравствуйте, jazzer, Вы писали:


J>>э-э-э... даешь мастер-класс?

Q>Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку:
Q>
Q>for(i = 0; i < 10 && !stop; ++i)
Q>


ты мой цикл перепиши таким вот образом, вместе посмеемся, ага.

PS если тебе нужно из середины цикла выйти, на условие же придется переходить через, прости господи, continue, а это ж, прости господи, замаскированный goto
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: готофобам к размышлению
От: VEAPUK  
Дата: 09.02.12 15:59
Оценка:
Здравствуйте, TimurSPB, Вы писали:

J>>вывод ? goto сила

TSP>Сила. Но сила эта слабеет. Человеку с внутренней дисциплиной не подобает писать код с goto

Пусть это делает компилятор и прочие?
Re[2]: готофобам к размышлению
От: VEAPUK  
Дата: 09.02.12 16:01
Оценка:
Здравствуйте, maykie, Вы писали:

M>Всё дело в том, что большая часть готофобов стала таковой из-за Дейкстры с его goto considered harmful. Правда дальше названия они ниасилили, так как там много букв и стиль текста сложный — иначе бы они поняли что не всякий goto плох.


Он имел ввиду "фортрановский стиль"...
Re[2]: готофобам к размышлению
От: RonWilson Россия  
Дата: 09.02.12 16:15
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>вывод ? goto сила
MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
MC>
MC>aquire resource

MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>


судя по книге Хелен Кастлер Windows NT Inside причем буквально в первых главах было обоснование языка программирования (мажорного, никто не говорит, что на нем все написано внутри): язык C стандарта такого-то с расширениями для поддержки исключений (насколько понял, речь идет о SEH а не плюсовых)
Re[8]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 16:19
Оценка:
Здравствуйте, jazzer, Вы писали:

Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...
Сало Украине, Героям Сала
Re[9]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 09.02.12 16:52
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...


а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку..
вот например из одной утилиты (кто не узнал это linux списки linux/list.h)
конечно если бы в этой задаче с самого начала использовались деревья то
этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные
решения так что считаю уместный пример
static VOID CheckUnique(list_head *liblist, list_head *apilist)
{
again_scan:
    apiitem *apiel;
    list_for_each_entry(apiel, apilist, link)
    {
        libitem *libel;
        list_for_each_entry(libel, liblist, link)
        {
            apiitem *apiuniqel;
            list_for_each_entry(apiuniqel, &libel->apilist, link)
            {
                if (!strcmp(apiuniqel->szApi, apiel->szApi))
                {
                    ...processing...
                    goto  again_scan;

ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно
я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие
Re[9]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 16:53
Оценка: +6
Здравствуйте, vpchelko, Вы писали:

V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...

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

Плюс структура — нифига не замена пачке локальных переменных, так как объект структуры у тебя с самого начала рождается целиком со всеми своими членами, в то время как локальные переменные вводятся по мере необходимости и доступности данных для инициализации, и поэтому могут быть ссылками, константами и т.п. — то, что невозможно со структурами.
Плюс локальные переменные на порядок лучше оптимизируются компилятором, по сравнению с аргументами функций, а уж тем более по сравнению со структурами.
Например, структура обязана лежать в памяти одним большим куском, в то время как локальные переменные компилятор может распихать по регистрам и вообще память не юзать для них.

Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало.
Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать.
Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты?
Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 17:04
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Здравствуйте, vpchelko, Вы писали:


J>а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку..

J>вот например из одной утилиты (кто не узнал это linux списки linux/list.h)
J>конечно если бы в этой задаче с самого начала использовались деревья то
J>этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные
J>решения так что считаю уместный пример
J>
J>static VOID CheckUnique(list_head *liblist, list_head *apilist)
J>{
J>again_scan:
J>    apiitem *apiel;
J>    list_for_each_entry(apiel, apilist, link)
J>    {
J>        libitem *libel;
J>        list_for_each_entry(libel, liblist, link)
J>        {
J>            apiitem *apiuniqel;
J>            list_for_each_entry(apiuniqel, &libel->apilist, link)
J>            {
J>                if (!strcmp(apiuniqel->szApi, apiel->szApi))
J>                {
J>                    ...processing...
J>                    goto  again_scan;
                
J>

J>ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно
J>я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие

Ужас, тяжело читать такой код.
Сало Украине, Героям Сала
Re[11]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 09.02.12 17:13
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Ужас, тяжело читать такой код.


сам в шоке )) линукс списки и венгерская нотация это аццкий венегрет и имена переменных адские
Re: готофобам к размышлению
От: PSV100  
Дата: 09.02.12 19:43
Оценка:
Хм... Lua — крайне консервативный, лаконичный и стройный язык: ни грамма лишнего. И только совсем недавно за столько лет специально ввели goto в язык — толп с плакатами в Бразилии замечено не было...
Re[2]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 09.02.12 19:58
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>вывод ? goto сила
MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
MC>
MC>aquire resource
MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>

Сравним:
aquire resource
do something
switch(1) case 1: default:
{
  if error break;

  do something else break;
}
release resource
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: готофобам к размышлению
От: MescalitoPeyot Украина  
Дата: 09.02.12 20:03
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вывод ? goto сила


Сила. Если мне вдруг внезапно понадобиться наваять достаточно крупный проект на голом С то я напишу его на Objective-C, там рантайм не такой уж и тяжелый, можно и на железку затянуть впишу его в проектный гайдлайн и буду использовать для очистки ресурсов в обязательном порядке. Все юноши с горящим взором и прочие снобы идут лесом.
Re[3]: готофобам к размышлению
От: Cyberax Марс  
Дата: 09.02.12 20:14
Оценка: +2
Здравствуйте, Vain, Вы писали:

V>Сравним:

Жуть — я про изнасилование switch'а.
Sapienti sat!
Re[10]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 20:34
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало.

J>Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать.
J>Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты?
J>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?

Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Сало Украине, Героям Сала
Re[11]: готофобам к размышлению
От: Cyberax Марс  
Дата: 09.02.12 23:14
Оценка: :)
Здравствуйте, vpchelko, Вы писали:

J>>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?

V>Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Попробуй написать что-нибудь, связанное со сложными вычислениями.
Sapienti sat!
Re[12]: готофобам к размышлению
От: vpchelko  
Дата: 10.02.12 00:31
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Попробуй написать что-нибудь, связанное со сложными вычислениями.


Библиотеку OpenCV юзал. Но тоже не приходилось.
Сало Украине, Героям Сала
Re[4]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 00:45
Оценка: -2
Здравствуйте, Cyberax, Вы писали:

V>>Сравним:

C>Жуть — я про изнасилование switch'а.
уж лучше чем goto.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: готофобам к размышлению
От: Cyberax Марс  
Дата: 10.02.12 00:58
Оценка: -1 :)
Здравствуйте, Vain, Вы писали:

V>>>Сравним:

C>>Жуть — я про изнасилование switch'а.
V>уж лучше чем goto.
Чем? Это goto просто с другим синтаксисом.

Могу ещё предложить такой вариант:
#define unicorn goto

...
   unicorn err_exit;
...
err_exit:
....


Тоже лучше goto!
Sapienti sat!
Re[3]: ОПАфиоз ЦИРКА
От: jhjhg6fjyfyju  
Дата: 10.02.12 01:03
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>На С это облегчает жизнь лишь тем, кто не умеет писать программы, то есть идут по пути наименьшего сопротивления: мол, зачем думать, когда я могу вставить goto.


такую лабуду пишут кто не в курсе что компьютер — это конечный автомат. Т.е. не от большого ума и с низкой квалификацией.
забанен на 2,5 недели за слово "Раша". адекватненько.
Re[3]: готофобам к размышлению
От: Banned by IT  
Дата: 10.02.12 02:17
Оценка: +1
Здравствуйте, Vain, Вы писали:

Я конечно не люблю goto и не использую его, но твой пример выглядит и читается куда хуже чем пример с goto.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: готофобам к размышлению
От: Banned by IT  
Дата: 10.02.12 02:17
Оценка:
Здравствуйте, Vain, Вы писали:

C>>Жуть — я про изнасилование switch'а.

V>уж лучше чем goto.

"Better dead than red" (C), huh?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: готофобам к размышлению
От: Banned by IT  
Дата: 10.02.12 02:17
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

Прикольнее будет:
#define rainbow_puking_unicorn goto
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: готофобам к размышлению
От: Banned by IT  
Дата: 10.02.12 02:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Попробуй написать что-нибудь, связанное со сложными вычислениями.

ECC криптография достаточно сложные вычисления?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: готофобам к размышлению
От: Banned by IT  
Дата: 10.02.12 02:17
Оценка:
Здравствуйте, MescalitoPeyot, Вы писали:

MP>Сила. Если мне вдруг внезапно понадобиться наваять достаточно крупный проект на голом С [s]то я напишу его на Objective-C

Plain C != Obj-C
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: готофобам к размышлению
От: cppnick  
Дата: 10.02.12 02:18
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

Оффтоп:

J>(кстати рекомендую всем у кого еще не установлен пакет Cygwin обязательно поставить получите юникс шелл и юникс утилиты)

Cygwin это костыль, лучше не насиловать винду, а ставить gnuwin32. Ну или уж если очень хочется, тогда SUA.
Re[4]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 09:23
Оценка:
Здравствуйте, Banned by IT, Вы писали:

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

Это неправда. Пример с несколькими goto читается хуже, потому-что увидев goto надо искать точку перехода для каждого отдельно, а про свич сразу всё ясно что она за скопом.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[13]: готофобам к размышлению
От: Cyberax Марс  
Дата: 10.02.12 11:43
Оценка: +1
Здравствуйте, Banned by IT, Вы писали:

C>>Попробуй написать что-нибудь, связанное со сложными вычислениями.

BBI>ECC криптография достаточно сложные вычисления?
Неа. Там как раз всё очень линейно. Кое-кто умудряется вообще без условных переходов криптографию делать.
Sapienti sat!
Re[5]: готофобам к размышлению
От: rusted Беларусь  
Дата: 10.02.12 12:21
Оценка: +2
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Banned by IT, Вы писали:


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

V>Это неправда. Пример с несколькими goto читается хуже, потому-что увидев goto надо искать точку перехода для каждого отдельно, а про свич сразу всё ясно что она за скопом.

Про switch сразу всё ясно только тому, кто этот switch написал, реакция всех остальных — "что это за непонятное использования switch-а?"
Re: готофобам к размышлению
От: trop Россия  
Дата: 10.02.12 12:46
Оценка:
goto — jmp
if/else — cmp, jne/jnz

наизнанку — невелика разница
-
Re[3]: готофобам к размышлению
От: Cadet  
Дата: 10.02.12 13:18
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Вот такой вот C маст дай.

V>

Вот такой С маст хэв.
Аргументы более весомые прведешь?
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[3]: готофобам к размышлению
От: Cadet  
Дата: 10.02.12 13:20
Оценка:
Здравствуйте, Vain, Вы писали:

MC>>[/code]

V>Сравним:
V>
V>aquire resource
V>do something
V>switch(1) case 1: default:
V>{
V>  if error break;

V>  do something else break;
V>}
V>release resource
V>


Пожалуйста, убейте автора.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[5]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 18:07
Оценка:
Здравствуйте, quwy, Вы писали:

Q>Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон.


Вот прикинь. Ты считаешь свёртку двух каких-то многомерных объетов. Типа пытаешься оценить степень похожести, например.
Но часто так складывается, что где-то в середине подсчёта, можно сделать отсечение, так как уже понятно, что степень похожести уже оценена достаточно точно, скажем...

Как будем делать?

Q>Но если руки чешутся, то сишный фор отлично завершается по флажку:

Q>
Q>for(i = 0; i < 10 && !stop; ++i)
Q>


Флажки -- во это точно говнокод, прошу простить мой френч.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: готофобам к размышлению
От: vpchelko  
Дата: 10.02.12 18:10
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Как будем делать?


return;...
Сало Украине, Героям Сала
Re[3]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 18:14
Оценка:
Здравствуйте, Vain, Вы писали:

V>Сравним:

V>
V>aquire resource
V>do something
V>switch(1) case 1: default:
V>{
V>  if error break;

V>  do something else break;
V>}
V>release resource
V>


Ты правда думаешь, что это ПРОЩЕ, чем вариант с goto?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 18:16
Оценка:
Здравствуйте, Vain, Вы писали:

C>>Жуть — я про изнасилование switch'а.

V>уж лучше чем goto.

Чем лучше?
goto, как минимум, по назначению используется...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 18:20
Оценка:
Здравствуйте, vpchelko, Вы писали:

E>>Как будем делать?


V>return;...


А кто освободит ресурсы?

Или в каждом return дублировать код освобождения ресурсов?

Ну и вообще, чем множественный return вообще лучше goto перёд? В принципе, в чём преимущество?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 19:09
Оценка: :)
Здравствуйте, Erop, Вы писали:

C>>>Жуть — я про изнасилование switch'а.

V>>уж лучше чем goto.
E>Чем лучше?
E>goto, как минимум, по назначению используется...
Так же примерно как и while?
#define BLABLA(...)\
  do\
  {\
    ...\
  }while(0)
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 19:14
Оценка:
Здравствуйте, rusted, Вы писали:

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

V>>Это неправда. Пример с несколькими goto читается хуже, потому-что увидев goto надо искать точку перехода для каждого отдельно, а про свич сразу всё ясно что она за скопом.
R>Про switch сразу всё ясно только тому, кто этот switch написал, реакция всех остальных — "что это за непонятное использования switch-а?"
Да что ты говоришь, а мужики то незнали
Автор: Vain
Дата: 10.02.12
..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 19:15
Оценка:
Здравствуйте, Vain, Вы писали:

E>>goto, как минимум, по назначению используется...

V>Так же примерно как и while?
V>
V>#define BLABLA(...)\
V>  do\
V>  {\
V>    ...\
V>  }while(0)
V>
Афигный цикл!!!


Есть вызод проще: пишешь на плюсах и не морочишь сишникам голову своей готофобией...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 19:18
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>ибо нет другого способа в языке для выхода из нескольких уровней циклов

А флажки проверять не комильфо?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[8]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 19:21
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>goto, как минимум, по назначению используется...

V>>Так же примерно как и while?
V>>
V>>#define BLABLA(...)\
V>>  do\
V>>  {\
V>>    ...\
V>>  }while(0)
V>>

Афигный цикл!!!
Угу и его так офигенно до сих пор и сишники и плюсники пользуют и не плюются.
E>Есть вызод проще: пишешь на плюсах и не морочишь сишникам голову своей готофобией...
дартаньян? я вас четсно не узнал в гриме.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: готофобам к размышлению
От: Erop Россия  
Дата: 10.02.12 19:25
Оценка:
Здравствуйте, Vain, Вы писали:


V>дартаньян? я вас четсно не узнал в гриме.


И дввно вы с собой разговариваете?
Я это к тому, что отрицать широкое использование гото для очистки в крупных успешных сишных проектах не приходится. Так что в теории о ужасах гото надо чегой-то поднастроить
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[10]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 19:31
Оценка:
Здравствуйте, Erop, Вы писали:

V>>дартаньян? я вас четсно не узнал в гриме.

E>И дввно вы с собой разговариваете?
а вы?

E>Я это к тому, что отрицать широкое использование гото для очистки в крупных успешных сишных проектах не приходится. Так что в теории о ужасах гото надо чегой-то поднастроить

Ну так я и отвечал на возмущение вовсе не про goto.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 11.02.12 07:14
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, jazzer, Вы писали:


J>>ибо нет другого способа в языке для выхода из нескольких уровней циклов

V>А флажки проверять не комильфо?
продемонстрируй, плиз
http://www.rsdn.ru/forum/flame.comp/4610257.1.aspx
Автор: jazzer
Дата: 09.02.12
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 11.02.12 10:34
Оценка:
о чем вообще речь я же привел примеры линуксовых
list_for_each_entry флажки в данном случае вообще не применимы
но тем не менее ты находишся в контексте трех вложенных
циклов и надо срочно выйти
Re[11]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 11.02.12 10:48
Оценка: +2
вообще складывается ощущение что готофобы рассматривают
некую идеальную ситуацию оторванную от реальной жизни
и на ее основе доказывают как хорошо жить без гото а
в случае реальных жизненных ситуаций где без гото сложно
начинают городить такой говнокод где гото и рядом не лежал
и вообще я считаю что готофобия это болезнь и бесполезно
доказывать готофобам что то это не лечится
Re[4]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 12:28
Оценка:
Здравствуйте, jazzer, Вы писали:

EOH>>>Для C и C++ goto — единственный способ выйти из вложенного цикла (кроме функций, плодить которые в ряде случаев совсем не хочется).

Q>>Нормальные люди из вложенных циклов выходят по условиям, ибо даже break/continue -- это тот же goto.
J>э-э-э... даешь мастер-класс?
J>
J>for() {
J>  ...
J>  for() {
J>    ...
J>    for() {
J>      ...
J>      if (condition1) goto out;
J>      ...
J>      if (condition2) goto out;
J>      ...
J>    }
J>    ...
J>  }
J>  ...
J>}
J>out:
J>

J>Продемонстрируешь, как "нормальные люди выходят по условиям" из таких вложенных циклов? (многоточия — это значимый код)
флажки пользуют:
bool doBreak = false;
for() {
  ...
  for() {
    ...
    for() {
      ...
      if (condition1) { doBreak = true; break; }
      ...
      if (condition2) { doBreak = true; break; }
      ...
    }
    if(doBreak) break;
    ...
  }
  if(doBreak) break;
  ...
}
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 12:30
Оценка:
Здравствуйте, Erop, Вы писали:

Q>>Но если руки чешутся, то сишный фор отлично завершается по флажку:

Q>>
Q>>for(i = 0; i < 10 && !stop; ++i)
Q>>

E>Флажки -- во это точно говнокод, прошу простить мой френч.
когда это флажки стали говнокодом по сравнению с goto?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: готофобам к размышлению
От: Erop Россия  
Дата: 11.02.12 13:05
Оценка:
Здравствуйте, Vain, Вы писали:

E>>Флажки -- во это точно говнокод, прошу простить мой френч.

V>когда это флажки стали говнокодом по сравнению с goto?

Всегда были...
У тебя есть конкретные претензии к прктике выхода из вложенных циклов по гото?
Если все претензии сводятся к тому, что там есть гото, то иди, обсуди это со своими единомышленниками. Я не считаю, что гото -- это однозначно плохо и не запрещаю своим подчинённым его использовать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: готофобам к размышлению
От: Cadet  
Дата: 11.02.12 13:54
Оценка: +1 -1
Здравствуйте, Vain, Вы писали:

J>>Продемонстрируешь, как "нормальные люди выходят по условиям" из таких вложенных циклов? (многоточия — это значимый код)

V>флажки пользуют:
V>
V>bool doBreak = false;
V>for() {
V>  ...
V>  for() {
V>    ...
V>    for() {
V>      ...
V>      if (condition1) { doBreak = true; break; }
V>      ...
V>      if (condition2) { doBreak = true; break; }
V>      ...
V>    }
V>    if(doBreak) break;
V>    ...
V>  }
V>  if(doBreak) break;
V>  ...
V>}
V>


Расстрелять без суда и следствия. Ты код превратил в головоломку, какой break к какому циклу относится.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[8]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 18:42
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>Флажки -- во это точно говнокод, прошу простить мой френч.

V>>когда это флажки стали говнокодом по сравнению с goto?
E>Всегда были...
а мужики то и не знали..

E>У тебя есть конкретные претензии к прктике выхода из вложенных циклов по гото?

E>Если все претензии сводятся к тому, что там есть гото, то иди, обсуди это со своими единомышленниками. Я не считаю, что гото -- это однозначно плохо и не запрещаю своим подчинённым его использовать...
Ну так чем же флажки хуже goto?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 18:46
Оценка:
Здравствуйте, Cadet, Вы писали:

C>Расстрелять без суда и следствия. Ты код превратил в головоломку, какой break к какому циклу относится.

Вы вдруг код разучились читать?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: готофобам к размышлению
От: Erop Россия  
Дата: 11.02.12 19:17
Оценка: +1
Здравствуйте, Vain, Вы писали:

V>Ну так чем же флажки хуже goto?


Лишняя сущность...

for( тут чего-то итерируем ) {
    if( xxx1 ) {
        doXXX1;
    }
    if( xxx2 ) {
        doXXX1;
        break
    }
    if( xxx3 ) {
        doXXX3;
    }
}
уместен ли тут флажок?
Я считаю, что не уместен.
Мало того, я считаю, что следующий код логически эквивалентен предыдущему:
for( тут чего-то итерируем по x ) {
  тут чего-то такое достаём, прикидываем, готовим
  if( yyy1 ) {
     goto endOfLoop;
  }
  for( тут итерируем по y ) {
    if( xxx1 ) {
        doXXX1;
    }
    if( xxx2 ) {
        doXXX1;
        goto endOfLoop
    }
    if( xxx3 ) {
        doXXX3;
    }
  }
endOfLoop: ;
}
То есть если в первом флажок не нужен, то и во втором не нужен...

Но в целом вопрос не особо важный. Я не думаю, что флажками ты всё сможешь запутать вусмерть.
Другое дело, что догматизм и отсутсвие внятной аргументации -- это плохая практика и тревожный симптом
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: готофобам к размышлению
От: Erop Россия  
Дата: 11.02.12 19:46
Оценка: +2
Здравствуйте, Cadet, Вы писали:

V>>
V>>bool doBreak = false;
V>>for() {
V>>  ...
V>>  for() {
V>>    ...
V>>    for() {
V>>      ...
V>>      if (condition1) { doBreak = true; break; }
V>>      ...
V>>      if (condition2) { doBreak = true; break; }
V>>      ...
V>>    }
V>>    if(doBreak) break;
V>>    ...
V>>  }
V>>  if(doBreak) break;
V>>  ...
V>>}
V>>


C>Расстрелять без суда и следствия. Ты код превратил в головоломку, какой break к какому циклу относится.


Главное, что не ясно, ради чего все эти напряги. Никто так внято и не смог пояснить что такого ужасного в гото по сравнению, например, с этой break-лапшой...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 20:08
Оценка:
Здравствуйте, Erop, Вы писали:

E>Никто так внято и не смог пояснить что такого ужасного в гото

1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.
2. Местка может быть и выше скопа, а не только ниже. С бреком обычно всё ясно что выход из ближайшего switch/while/for-а.
3. Нету скопов, код превращается просто в листинг без отступов, со скопами всегда делают отступ, отсюда и наглядность брека.

E>по сравнению, например, с этой break-лапшой...

goto-лапша не лучше.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[8]: готофобам к размышлению
От: Cyberax Марс  
Дата: 11.02.12 20:12
Оценка: +3
Здравствуйте, Vain, Вы писали:

E>>Никто так внято и не смог пояснить что такого ужасного в гото

V>1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.

"goto error_exit" — это абсолютно стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет в конце функции.

V>2. Местка может быть и выше скопа, а не только ниже. С бреком обычно всё ясно что выход из ближайшего switch/while/for-а.

Ага, а с флажками надо ещё:
1) Смотреть где он проверяется.
2) Смотреть как он инициализируется.
3) Смотреть, не меняется ли он где-то ещё.

E>>по сравнению, например, с этой break-лапшой...

V>goto-лапша не лучше.
Лучше. Она банально компактнее.
Sapienti sat!
Re[9]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 11.02.12 20:44
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Vain, Вы писали:


E>>>Никто так внято и не смог пояснить что такого ужасного в гото

V>>1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.

C>"goto error_exit" — это абсолютно стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет в конце функции.

V>>2. Местка может быть и выше скопа, а не только ниже. С бреком обычно всё ясно что выход из ближайшего switch/while/for-а.

C>Ага, а с флажками надо ещё:
C>1) Смотреть где он проверяется.
C>2) Смотреть как он инициализируется.
C>3) Смотреть, не меняется ли он где-то ещё.
Ну так это абсолютный стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет после цикла.

E>>>по сравнению, например, с этой break-лапшой...

V>>goto-лапша не лучше.
C>Лучше. Она банально компактнее.
С аргументом про скоп значит согласны?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[10]: готофобам к размышлению
От: Cyberax Марс  
Дата: 11.02.12 20:57
Оценка:
Здравствуйте, Vain, Вы писали:

C>>3) Смотреть, не меняется ли он где-то ещё.

V>Ну так это абсолютный стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет после цикла.
Неа. Это нестандартный приём. switch может использоваться для множества целей — от стандартного switch'а до хитрого Duff's device'а. И надо глазами смотреть каждый раз что именно там думал автор. Особенно учитывая, что обычно нет комментариев.

А вот с "goto cleanup" всё сразу понятно — оно само себя объясняет.

V>>>goto-лапша не лучше.

C>>Лучше. Она банально компактнее.
V>С аргументом про скоп значит согласны?
Несогласен. goto не меняет scope'а, так что аргумент совершенно левый.
Sapienti sat!
Re[8]: готофобам к размышлению
От: Erop Россия  
Дата: 11.02.12 21:25
Оценка:
Здравствуйте, Vain, Вы писали:

V>1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.

Конец цикла тоже надо искать. А если ц клы вложенные, то ещё и правильный конец найти, а не какой-попало.
С другой стороны, если метка понятно названа, то искать её не сложнее, чем конец самого объемлющего цикла, например...

Что касется "исходного примера", то то, что в нём что-то якобы не раскрыто, не может служить демонатрацией ужосов гото...

V>2. Местка может быть и выше скопа, а не только ниже. С бреком обычно всё ясно что выход из ближайшего switch/while/for-а.

А если надо не из ближайшего?
И вообще, я пока не понял мы же обсуждаем использование гото для выхода из вложенного цикла? При чём тут тогда метка, которая выше? Ну и вообще, если код настолько простой и ясный, что главная проблема в нём -- найти таки метку, то это прекрасный код...

V>3. Нету скопов, код превращается просто в листинг без отступов, со скопами всегда делают отступ, отсюда и наглядность брека.

Это я не понял. При чём тут гото?

V>goto-лапша не лучше.

Лбая лапша плоха. Птому лично я из выхода по гото и лапши из брейков, однозначно рекоменду первое, а не второе, потому, что на второе получается лапша...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: ОПАфиоз ЦИРКА
От: Programador  
Дата: 11.02.12 22:29
Оценка:
Здравствуйте, jhjhg6fjyfyju, Вы писали:

J>такую лабуду пишут кто не в курсе что компьютер — это конечный автомат.


кстати про автоматы http://dxdy.ru/topic10182-18.html — как такое без гото сделать?
Re[10]: готофобам к размышлению
От: Programador  
Дата: 11.02.12 22:39
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно


проблему с контекстом рещалибы вложенные функции — тут их поминали недавно http://rsdn.ru/forum/cpp/4568791.1.aspx
Автор: Masterkent
Дата: 08.01.12
Re[11]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 12.02.12 00:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>3) Смотреть, не меняется ли он где-то ещё.

V>>Ну так это абсолютный стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет после цикла.
C>Неа. Это нестандартный приём. switch может использоваться для множества целей
Зачем вы всё в кучу мешаете? Здесь я писал про флажки, а не конкретно про switch, слидите за тредом.

C>А вот с "goto cleanup" всё сразу понятно — оно само себя объясняет.

V>>>>goto-лапша не лучше.
C>>>Лучше. Она банально компактнее.
V>>С аргументом про скоп значит согласны?
C>Несогласен. goto не меняет scope'а, так что аргумент совершенно левый.
Как это не меняет, если выход по goto делается хрен-знает-куда-пока-не-нашёл?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 12.02.12 00:27
Оценка:
Здравствуйте, Erop, Вы писали:

V>>1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.

E>Конец цикла тоже надо искать.
В том то и дело что скоп обычно с отступом и поэтому нагляднее.

E>Что касется "исходного примера", то то, что в нём что-то якобы не раскрыто, не может служить демонатрацией ужосов гото...

Как и флажков, собственно.

V>>2. Местка может быть и выше скопа, а не только ниже. С бреком обычно всё ясно что выход из ближайшего switch/while/for-а.

E>А если надо не из ближайшего?
E>И вообще, я пока не понял мы же обсуждаем использование гото для выхода из вложенного цикла? При чём тут тогда метка, которая выше? Ну и вообще, если код настолько простой и ясный, что главная проблема в нём -- найти таки метку, то это прекрасный код...

V>>3. Нету скопов, код превращается просто в листинг без отступов, со скопами всегда делают отступ, отсюда и наглядность брека.

E>Это я не понял. При чём тут гото?
Я же объясняю, что с отсупами проще искать, а они связаны со скопом.

V>>goto-лапша не лучше.

E>Лбая лапша плоха. Птому лично я из выхода по гото и лапши из брейков, однозначно рекоменду первое, а не второе, потому, что на второе получается лапша...
Ошибаетесь, и на первое прекрасно получается лапша, и goto как правило этому ещё и способствует, т.к. элементарно нарушает поток выполнения между скопами.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: готофобам к размышлению
От: Wolverrum Ниоткуда  
Дата: 12.02.12 01:39
Оценка:
Здравствуйте, Сыроежка, Вы писали [много чего]:

Вас почитать, так и разработка библиотек ffmpeg, poppler, языков ruby, newlisp, да и ядра linux и кучи другого софта, который активно пишется на Си — ведется все сплошь неадекватными некомпетентными, и узколобыми людишками.

Зато, полагаю, в Вашем мирке библиотека bigz являет собой эталон кодирования на Си.

Ну и
>нужно писать объектно-ориентированные программы.
orly?
Re[12]: готофобам к размышлению
От: Cyberax Марс  
Дата: 12.02.12 02:01
Оценка:
Здравствуйте, Vain, Вы писали:

V>>>Ну так это абсолютный стандартный паттерн, который понятен любому С-шнику. Его не надо искать глазами, он гарантировано будет после цикла.

C>>Неа. Это нестандартный приём. switch может использоваться для множества целей
V>Зачем вы всё в кучу мешаете? Здесь я писал про флажки, а не конкретно про switch, слидите за тредом.
С флажками вопрос отдельный. Иногда они имеют смысл, но вот для выхода из двух вложенных циклов они уже сосут.

C>>Несогласен. goto не меняет scope'а, так что аргумент совершенно левый.

V>Как это не меняет, если выход по goto делается хрен-знает-куда-пока-не-нашёл?
В идиоматическом "goto error_exit" не меняет:
{ //Scope 1
  var_type var;
  if (something)
  { //Scope 1, Scope 2
    goto err_exit;
  }  

  err_exit: //Всё ещё в scope 1
    cleanup(var);
}
Sapienti sat!
Re[10]: готофобам к размышлению
От: Erop Россия  
Дата: 12.02.12 04:31
Оценка: 4 (2) +2
Здравствуйте, Vain, Вы писали:

V>>>1. Тем что метку глазами надо искать и тем что в исходном примере
Автор: Mr.Cat
Дата: 08.02.12
"хорошесть" способа так и не раскрыта.

E>>Конец цикла тоже надо искать.
V>В том то и дело что скоп обычно с отступом и поэтому нагляднее.

Ты о досрочном выходе из цикла или о чём?..

Если таки о выходе, то у цикла есть свой отступ в любом случае...

Если о сишной практике очистки по гото, то метки традиционно пишут СЛЕВА, так что их хорошо видно...

V>Как и флажков, собственно.

Про флажки и так всё ясно. Ты можешь как-то рционально объяснить ЧЕМ ПЛОХО выходить о гото из вложенных циклов?..


V>Я же объясняю, что с отсупами проще искать, а они связаны со скопом.

так ты досрочно выходишь или этак -- отступы не меняются!
Мало того, флажок, как раз, надо искать, а метка слев торчит -- её хорошо видно...

V>Ошибаетесь, и на первое прекрасно получается лапша, и goto как правило этому ещё и способствует, т.к. элементарно нарушает поток выполнения между скопами.


Был конкретный пример с вложенными циклами и досрочным выходом. Там лапши не было. Строго в тех местах, где надо по логике стояли
goto exitLoop;


Ты переделал на флажки, и пришлось в пяти местах "не забыть" написть
if( isBreak ) break;

Это и есть лапша!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: готофобам к размышлению
От: anonymouss  
Дата: 12.02.12 07:59
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вообще складывается ощущение что готофобы рассматривают

J>некую идеальную ситуацию оторванную от реальной жизни
J>и на ее основе доказывают как хорошо жить без гото а
J>в случае реальных жизненных ситуаций где без гото сложно
J>начинают городить такой говнокод где гото и рядом не лежал
J>и вообще я считаю что готофобия это болезнь и бесполезно
J>доказывать готофобам что то это не лечится

это лечится, точнее само проходит со временем
Re[5]: готофобам к размышлению
От: anonymouss  
Дата: 12.02.12 08:01
Оценка: +1
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, jazzer, Вы писали:


EOH>>>>Для C и C++ goto — единственный способ выйти из вложенного цикла (кроме функций, плодить которые в ряде случаев совсем не хочется).

Q>>>Нормальные люди из вложенных циклов выходят по условиям, ибо даже break/continue -- это тот же goto.
J>>э-э-э... даешь мастер-класс?
J>>
J>>for() {
J>>  ...
J>>  for() {
J>>    ...
J>>    for() {
J>>      ...
J>>      if (condition1) goto out;
J>>      ...
J>>      if (condition2) goto out;
J>>      ...
J>>    }
J>>    ...
J>>  }
J>>  ...
J>>}
J>>out:
J>>

J>>Продемонстрируешь, как "нормальные люди выходят по условиям" из таких вложенных циклов? (многоточия — это значимый код)
V>флажки пользуют:
V>
V>bool doBreak = false;
V>for() {
V>  ...
V>  for() {
V>    ...
V>    for() {
V>      ...
V>      if (condition1) { doBreak = true; break; }
V>      ...
V>      if (condition2) { doBreak = true; break; }
V>      ...
V>    }
V>    if(doBreak) break;
V>    ...
V>  }
V>  if(doBreak) break;
V>  ...
V>}
V>


вариант с goto проще и понятнее (условий меньше).
Re[11]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 12.02.12 12:00
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ты переделал на флажки, и пришлось в пяти местах "не забыть" написть
if( isBreak ) break;

E>Это и есть лапша!
Почему в 5, если только в 2х? Или ты собираешься писать многоэтажные циклы, так это уже не проблемы break будут, а проблемы с программистом.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 12.02.12 15:18
Оценка:
Здравствуйте, anonymouss, Вы писали:

A>вариант с goto проще и понятнее (условий меньше).

Это в общем случае от кода зависит. Есть код где нельзя просто goto сделать куда-то, к примеру, если Try/BeginCatch/EndCatch через макросы на longjump и если EndCatch пропустить то будет потом трахбабах.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: готофобам к размышлению
От: anonymouss  
Дата: 12.02.12 18:33
Оценка: +2
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, anonymouss, Вы писали:


A>>вариант с goto проще и понятнее (условий меньше).

V>Это в общем случае от кода зависит. Есть код где нельзя просто goto сделать куда-то, к примеру, если Try/BeginCatch/EndCatch через макросы на longjump и если EndCatch пропустить то будет потом трахбабах.

Ну так это и пытаются коллеги объяснить, от кода зависит. Там где goto проще и понятнее, и тем более общепринятее (освобождение ресурсов например), нужно использовать goto и не придумывать хитроумные способы, лишь бы его не писать.
Re[8]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 12.02.12 22:05
Оценка:
Здравствуйте, anonymouss, Вы писали:

A>>>вариант с goto проще и понятнее (условий меньше).

V>>Это в общем случае от кода зависит. Есть код где нельзя просто goto сделать куда-то, к примеру, если Try/BeginCatch/EndCatch через макросы на longjump и если EndCatch пропустить то будет потом трахбабах.
A>Ну так это и пытаются коллеги объяснить, от кода зависит. Там где goto проще и понятнее, и тем более общепринятее (освобождение ресурсов например), нужно использовать goto и не придумывать хитроумные способы, лишь бы его не писать.
Какие ещё хитроумные способы вы во фложках рассмотрели? Это обычный код и используется повсеместно, но я как погляжу вам бестолку это объяснять. Это примерно как флейм сторонников пробелов и сторонников табов, каждый всё равно останется при своём мнении.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[8]: готофобам к размышлению
От: vpchelko  
Дата: 13.02.12 14:34
Оценка:
Здравствуйте, Erop, Вы писали:

E>А кто освободит ресурсы?


E>Или в каждом return дублировать код освобождения ресурсов?


E>Ну и вообще, чем множественный return вообще лучше goto перёд? В принципе, в чём преимущество?


после ретурна незя?
Сало Украине, Героям Сала
Re[5]: ОПАфиоз ЦИРКА
От: Tanker  
Дата: 13.02.12 16:07
Оценка:
Здравствуйте, Programador, Вы писали:

J>>такую лабуду пишут кто не в курсе что компьютер — это конечный автомат.


P>кстати про автоматы http://dxdy.ru/topic10182-18.html — как такое без гото сделать?


http://www.rsdn.ru/forum/design/3986248.1.aspx
Автор: Ikemefula
Дата: 06.10.10
The animals went in two by two, hurrah, hurrah...
Re[9]: готофобам к размышлению
От: anonymouss  
Дата: 14.02.12 17:46
Оценка: +3
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, anonymouss, Вы писали:


A>>>>вариант с goto проще и понятнее (условий меньше).

V>>>Это в общем случае от кода зависит. Есть код где нельзя просто goto сделать куда-то, к примеру, если Try/BeginCatch/EndCatch через макросы на longjump и если EndCatch пропустить то будет потом трахбабах.
A>>Ну так это и пытаются коллеги объяснить, от кода зависит. Там где goto проще и понятнее, и тем более общепринятее (освобождение ресурсов например), нужно использовать goto и не придумывать хитроумные способы, лишь бы его не писать.
V>Какие ещё хитроумные способы вы во фложках рассмотрели? Это обычный код и используется повсеместно, но я как погляжу вам бестолку это объяснять. Это примерно как флейм сторонников пробелов и сторонников табов, каждый всё равно останется при своём мнении.

Код с флажками вместо goto мне не попадался в отличие от простого goto. Так что не повсеместно И это очень хорошо!
Раньше я тоже боялся goto, но потом понял, что страшнее как раз без goto. Думаю обратно я уже не перепойму, поэтому да, бесполезно
Re[6]: готофобам к размышлению
От: Erop Россия  
Дата: 14.02.12 17:52
Оценка:
Здравствуйте, anonymouss, Вы писали:

A>вариант с goto проще и понятнее (условий меньше).


И они в более ожиданных местах...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: готофобам к размышлению
От: Erop Россия  
Дата: 14.02.12 17:56
Оценка:
Здравствуйте, Vain, Вы писали:

V>Какие ещё хитроумные способы вы во фложках рассмотрели? Это обычный код и используется повсеместно, но я как погляжу вам бестолку это объяснять. Это примерно как флейм сторонников пробелов и сторонников табов, каждый всё равно останется при своём мнении.


Я всё ещё жду объяснения, чем же конкретно плох вариант с выходом из вложенного цикла по goto?

Пока что ты говорил, что в варианте с break естьотступы. В варианте с goto они тоже есть. И там, где канчается тело внешнего цикла, должна стоять метка, куда мы выходим. Хорошо заметная, потому, что метки пишут слева...
Так что эту, конкретно, претензию, считаю несостоятельной.

Ещё какие-то претензии к выходу по goto из вложенных циклов есть?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: готофобам к размышлению
От: Pyromancer  
Дата: 15.02.12 07:15
Оценка:
Здравствуйте, anonymouss, Вы писали:

A>Здравствуйте, Vain, Вы писали:


V>>Здравствуйте, anonymouss, Вы писали:


A>>>вариант с goto проще и понятнее (условий меньше).

V>>Это в общем случае от кода зависит. Есть код где нельзя просто goto сделать куда-то, к примеру, если Try/BeginCatch/EndCatch через макросы на longjump и если EndCatch пропустить то будет потом трахбабах.

A>Ну так это и пытаются коллеги объяснить, от кода зависит. Там где goto проще и понятнее, и тем более общепринятее (освобождение ресурсов например), нужно использовать goto и не придумывать хитроумные способы, лишь бы его не писать.


A потом прийдет компилятор и превратит все переходы, хоть по goto, хоть нет, все равно в jmp
Re[9]: готофобам к размышлению
От: VEAPUK  
Дата: 15.02.12 07:31
Оценка: :)
Здравствуйте, Pyromancer, Вы писали:

P>A потом прийдет компилятор и превратит все переходы, хоть по goto, хоть нет, все равно в jmp


Вот и я говорю ООП — зло, пока не поддерживается на уровне архитектуры ЭВМ.
Re[10]: готофобам к размышлению
От: Erop Россия  
Дата: 15.02.12 07:53
Оценка:
Здравствуйте, VEAPUK, Вы писали:

VEA>Вот и я говорю ООП — зло, пока не поддерживается на уровне архитектуры ЭВМ.


казалась бы, какая связь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: готофобам к размышлению
От: VEAPUK  
Дата: 15.02.12 08:10
Оценка:
Здравствуйте, Erop, Вы писали:

VEA>>Вот и я говорю ООП — зло, пока не поддерживается на уровне архитектуры ЭВМ.


E>казалась бы, какая связь?


лопата:

goto = jmp
вызов функции или процедуры = call

как иерархичность (по Г. Бучу) забабахать?
Re[12]: След потерян, как говорил Маугли... :xz:
От: Erop Россия  
Дата: 15.02.12 08:34
Оценка:
Здравствуйте, VEAPUK, Вы писали:

VEA>лопата:


VEA>goto = jmp

VEA>вызов функции или процедуры = call

VEA>как иерархичность (по Г. Бучу) забабахать?


След потерян, как говорил Маугли...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: готофобам к размышлению
От: carpenter Голландия  
Дата: 16.02.12 16:20
Оценка:
Здравствуйте, Сыроежка, Вы писали:

вы теперь мой любимый писатель , зачитываюсь просто
Весь мир — Кремль, а люди в нем — агенты
Re[10]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 17.02.12 01:00
Оценка:
Здравствуйте, Erop, Вы писали:

V>>Какие ещё хитроумные способы вы во фложках рассмотрели? Это обычный код и используется повсеместно, но я как погляжу вам бестолку это объяснять. Это примерно как флейм сторонников пробелов и сторонников табов, каждый всё равно останется при своём мнении.

E>Я всё ещё жду объяснения, чем же конкретно плох вариант с выходом из вложенного цикла по goto?
С тем что он ко всему сказанному ещё и поток выполнения меняет, что заставляет глаза "скакать" с места на место. И для того что бы посмотреть нужно крутить в конец функции. С обычным выходом из скопа такая проблема стоит менее остро.

E>Пока что ты говорил, что в варианте с break естьотступы. В варианте с goto они тоже есть. И там, где канчается тело внешнего цикла, должна стоять метка, куда мы выходим. Хорошо заметная, потому, что метки пишут слева...

дефайны тоже пишут слева, а бывают и выравнивают вместе с кодом
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[11]: готофобам к размышлению
От: Erop Россия  
Дата: 17.02.12 07:14
Оценка: +1
Здравствуйте, Vain, Вы писали:

V>С тем что он ко всему сказанному ещё и поток выполнения меняет, что заставляет глаза "скакать" с места на место. И для того что бы посмотреть нужно крутить в конец функции. С обычным выходом из скопа такая проблема стоит менее остро.


Почему?
Всё равно break так же ветвит поток управления. В чём тут вообще разница с break?

V>дефайны тоже пишут слева, а бывают и выравнивают вместе с кодом


Чёрт, и часто дефайны пишут ВНУТРИ функций?

Ну и вообще, любую С/С++ программу можно зашифровать до полной нечитабельности, но мы же обсуждаем НОРМАЛЬНЫЕ программы...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 17.02.12 22:16
Оценка: -2
Здравствуйте, Erop, Вы писали:

V>>С тем что он ко всему сказанному ещё и поток выполнения меняет, что заставляет глаза "скакать" с места на место. И для того что бы посмотреть нужно крутить в конец функции. С обычным выходом из скопа такая проблема стоит менее остро.

E>Почему?
E>Всё равно break так же ветвит поток управления.
Мне плевать во что и как свич превращается внутри, снаружи я использую последовательность выражений у которых поток управления предопределён, а значит проще читается.

V>>дефайны тоже пишут слева, а бывают и выравнивают вместе с кодом

E>Чёрт, и часто дефайны пишут ВНУТРИ функций?
В С — почти постоянно.

E>Ну и вообще, любую С/С++ программу можно зашифровать до полной нечитабельности, но мы же обсуждаем НОРМАЛЬНЫЕ программы...

Дайте определение нормальной программы.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[13]: готофобам к размышлению
От: Erop Россия  
Дата: 18.02.12 05:56
Оценка:
Здравствуйте, Vain, Вы писали:

V>Мне плевать во что и как свич превращается внутри, снаружи я использую последовательность выражений у которых поток управления предопределён, а значит проще читается.


Мне не янсна твоя терминология "внутри" и "снаружи"? Мы всё ещё о С++?

Напоминаю, что мы обсуждаем такую конструкцию, как вложенный цикл с отсечением.
И обсуждаем, как лучше всего сделать отсечение.

По идее, есть две логики.
1) Сам цикл
2) Отсечение.
Обычно для понимания (1) не нужно вообще думать о (2), а у (2) обычно есть какакая-то своя хитрая идея.

Поэтому-то, если цикл не вложенный, то так удобно делть отсечения по break. Вся логика цикла собрана в заголовке цикла, и туда не надо тулить ничего лишнего, вся логика отсечения собрана в том месте, где оно происходит, и туда тоже не надо тулиь ничего лишнего. Надо тебе понять, как этот цикл работает без отсечений -- смотришь на заголовок и тело, надо тебе понять чё за отсечение такое -- смотришь на тот if в котором break...

Для вложенных циклов вместо break ишешь goto afterLoop. Объясни, в чём вообще логически эти конструкции от личаются? Если метка afterLoop нахоится где-то не там, то это ошибка. А если там и код нормально написан?

V>Дайте определение нормальной программы.

Если ты не понимаешь, что такое нормальная программа, то обсуждать с тобой такие тонкости стиля, как goto мы флажки -- вообще бессмысленно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 18.02.12 18:36
Оценка:
Здравствуйте, Erop, Вы писали:

V>>Мне плевать во что и как свич превращается внутри, снаружи я использую последовательность выражений у которых поток управления предопределён, а значит проще читается.

E>Мне не янсна твоя терминология "внутри" и "снаружи"? Мы всё ещё о С++?
Мы и о С и о С++.

E>Напоминаю, что мы обсуждаем такую конструкцию, как вложенный цикл с отсечением.

E>И обсуждаем, как лучше всего сделать отсечение.
E>...
E>Для вложенных циклов вместо break ишешь goto afterLoop.
А мы всё о простом примере в вакууме говорим или о реальном коде? Потому как в реальном коде как правило ты не за конец цикла прыгаешь а в конец функции, что как бе две больших разницы.

V>>Дайте определение нормальной программы.

E>Если ты не понимаешь, что такое нормальная программа, то обсуждать с тобой такие тонкости стиля, как goto мы флажки -- вообще бессмысленно...
Если ты собрался давать такое определение, то тем более.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[15]: готофобам к размышлению
От: Erop Россия  
Дата: 18.02.12 18:48
Оценка:
Здравствуйте, Vain, Вы писали:

V>А мы всё о простом примере в вакууме говорим или о реальном коде? Потому как в реальном коде как правило ты не за конец цикла прыгаешь а в конец функции, что как бе две больших разницы.

Это с какого перепугу?
Почему это при отсечке надо пропустить код ПОСЛЕ цикла.
Кроме того, если даже и прыгаем в конец (хотя тогда можно просто return написать), то код с флажками всё равно сложнее и хуже...

V>Если ты собрался давать такое определение, то тем более.


Если ты не понял, то мне не интересно обсуждать что такое нормальная программа. IMHO к goto это никакого прямого отношения не имеет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[13]: готофобам к размышлению
От: Erop Россия  
Дата: 18.02.12 18:51
Оценка:
Здравствуйте, Vain, Вы писали:

V>последовательность выражений у которых поток управления предопределён, а значит проще читается.


Эта фраза, наводит меня на мысли о "дисциплине программирования" Дейкстры. И я согласен с таким подходом!
Просто я понимаю, что бывают такие goto, которые не нарушают такую структуру программы. И именно они и являются приемлемыми!
То есть, goto -- это скорее тревожный симптом. Если тебе вдруг понадобился этот оператор, стоит проверить свою программу на процедурность... А в самом по себе готе нет никакого криминада при этом
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[16]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 19.02.12 02:57
Оценка:
Здравствуйте, Erop, Вы писали:

V>>А мы всё о простом примере в вакууме говорим или о реальном коде? Потому как в реальном коде как правило ты не за конец цикла прыгаешь а в конец функции, что как бе две больших разницы.

E>Это с какого перепугу?
E>Почему это при отсечке надо пропустить код ПОСЛЕ цикла.
Потому-что cleanup в конце функции пишут.

E>Кроме того, если даже и прыгаем в конец (хотя тогда можно просто return написать), то код с флажками всё равно сложнее и хуже...

Код с флажками не нарушает потока выполнения.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[17]: готофобам к размышлению
От: Programador  
Дата: 19.02.12 08:18
Оценка: +1
Здравствуйте, Vain, Вы писали:

V>Код с флажками не нарушает потока выполнения.


главное не нарушать тайный ход фишки — за это канделябрами бьют
Re[17]: готофобам к размышлению
От: Erop Россия  
Дата: 19.02.12 09:11
Оценка:
Здравствуйте, Vain, Вы писали:

E>>Почему это при отсечке надо пропустить код ПОСЛЕ цикла.

V>Потому-что cleanup в конце функции пишут.
Мы же обсуждаем удачные примеры использованя goto? Мы обсуждаем два РАЗНЫХ примера.
1) goto cleanup в С
2) выход из вложенного цикла в С\С++.

Зачем ты их всё время смешиваешь? Таки ты ответишь, что же плохого в НОРМАЛЬНО написанном выходе из вложенного цикла по гото?


E>>Кроме того, если даже и прыгаем в конец (хотя тогда можно просто return написать), то код с флажками всё равно сложнее и хуже...

V>Код с флажками не нарушает потока выполнения.
Ты что ли формально доказываешь весь свой код? М же говорим не о вычислении weakest_precondition, а о читабельности программы?

И кодс флажками читать сложнее, так как обработка флажка разюросано по коду, в отличии от обработки гото.
Мало того, в том случае, когда кодируемый алгоритм предполагает, в случае досрочного выхода из цикла, переходить не на код сразу за циклом, а куда-то ещё, код на флажках будет ещё сложнее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 19.02.12 15:50
Оценка: :))
Здравствуйте, Erop, Вы писали:

E>>>Почему это при отсечке надо пропустить код ПОСЛЕ цикла.

V>>Потому-что cleanup в конце функции пишут.
E>Мы же обсуждаем удачные примеры использованя goto? Мы обсуждаем два РАЗНЫХ примера.
E>1) goto cleanup в С
E>2) выход из вложенного цикла в С\С++.
E>Зачем ты их всё время смешиваешь? Таки ты ответишь, что же плохого в НОРМАЛЬНО написанном выходе из вложенного цикла по гото?
Нарушения потока следования. Спроси ещё раз.

E>>>Кроме того, если даже и прыгаем в конец (хотя тогда можно просто return написать), то код с флажками всё равно сложнее и хуже...

V>>Код с флажками не нарушает потока выполнения.
E>Ты что ли формально доказываешь весь свой код? М же говорим не о вычислении weakest_precondition, а о читабельности программы?
E>И кодс флажками читать сложнее, так как обработка флажка разюросано по коду, в отличии от обработки гото.
Мне код с флажками читать проще чем goto, будем дальше спорить?

E>Мало того, в том случае, когда кодируемый алгоритм предполагает, в случае досрочного выхода из цикла, переходить не на код сразу за циклом, а куда-то ещё, код на флажках будет ещё сложнее...

А как флажки связаны с "переходить куда-то ещё"? Или это всё таки не с ними связано, а с другими конструкциями?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[19]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 19.02.12 21:09
Оценка: +1
я вынес из этой дискуссии для себя несколько мыслей
1) правы обе спорящие строны
2) иногда удобно goto этого нельзя отрицать
3) нельзя впадать в крайность типа "нет goto" или "goto must have"
4) читая код в основном вижу что goto по делу поэтому не вижу причин беспокоиться

"Критикуя, критикуй мнение, а не его автора." Леонардо да Винчи
"Оскорбляя другого, ты не заботишься о самом себе." Леонардо да Винчи
"Не ссорься без причины." Царь Соломон
Re[19]: готофобам к размышлению
От: Erop Россия  
Дата: 20.02.12 02:31
Оценка: +1
Здравствуйте, Vain, Вы писали:

E>>Зачем ты их всё время смешиваешь? Таки ты ответишь, что же плохого в НОРМАЛЬНО написанном выходе из вложенного цикла по гото?

V>Нарушения потока следования. Спроси ещё раз.
А в чём разница с break?

E>>Ты что ли формально доказываешь весь свой код? М же говорим не о вычислении weakest_precondition, а о читабельности программы?

E>>И кодс флажками читать сложнее, так как обработка флажка разюросано по коду, в отличии от обработки гото.
V>Мне код с флажками читать проще чем goto, будем дальше спорить?
Зачем спорить? Так и говори, что ты лично против goto потому, что не умеешь им пользоваться и вообще настолько плохо знаешь, что даже код с ним тее читать сложно. Что тут обсуждать? Могу посочувствовать...


V>А как флажки связаны с "переходить куда-то ещё"? Или это всё таки не с ними связано, а с другими конструкциями?


Ну как бы я предполагал, что мы рассматриваем разные способы закодировать ОДИН И ТОТ ЖЕ АЛГОРИТМ.
И если в версии с goto надо не просто выйти из вложенного цикла, а ещё и пропустить какой-то код сразу за циклом, то и в весии с флажками должно быть так же...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[20]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 20.02.12 02:42
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>Зачем ты их всё время смешиваешь? Таки ты ответишь, что же плохого в НОРМАЛЬНО написанном выходе из вложенного цикла по гото?

V>>Нарушения потока следования. Спроси ещё раз.
E>А в чём разница с break?
В том что брек из скопа скачет, а гото хз куда.

E>>>Ты что ли формально доказываешь весь свой код? М же говорим не о вычислении weakest_precondition, а о читабельности программы?

E>>>И кодс флажками читать сложнее, так как обработка флажка разюросано по коду, в отличии от обработки гото.
V>>Мне код с флажками читать проще чем goto, будем дальше спорить?
E>Зачем спорить? Так и говори, что ты лично против goto потому, что не умеешь им пользоваться и вообще настолько плохо знаешь, что даже код с ним тее читать сложно. Что тут обсуждать? Могу посочувствовать...


V>>А как флажки связаны с "переходить куда-то ещё"? Или это всё таки не с ними связано, а с другими конструкциями?

E>Ну как бы я предполагал, что мы рассматриваем разные способы закодировать ОДИН И ТОТ ЖЕ АЛГОРИТМ.
E>И если в версии с goto надо не просто выйти из вложенного цикла, а ещё и пропустить какой-то код сразу за циклом, то и в весии с флажками должно быть так же...
Так же да не так же. В версии с флажками мне не надо нарушать порядка чтения кода, я просто продолжаю читать код последовательно, в версии с goto мне обязательно надо метку найти, чтобы посмотреть что там за код.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[21]: готофобам к размышлению
От: Erop Россия  
Дата: 21.02.12 15:00
Оценка:
Здравствуйте, Vain, Вы писали:

V>Так же да не так же. В версии с флажками мне не надо нарушать порядка чтения кода, я просто продолжаю читать код последовательно, в версии с goto мне обязательно надо метку найти, чтобы посмотреть что там за код.


Это какая-то твоя личная особенность. Мне, например, вполне достаточно увидеть goto afterLoop;, чтобы предположить, что это какой-то досрочный выход из цикла, и поверить, что метка afterLoop находится там, где и должна -- сразу за телом объемлющего цикла...
Но я теперь, по крайней мере понял, что тебе в goto не нравится. Ты типа на goto глазами скачешь, а на break нет.
А ты не пробовал просто не скакать?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[22]: готофобам к размышлению
От: kvser  
Дата: 21.02.12 19:57
Оценка:
Здравствуйте, Erop, Вы писали:

E>Это какая-то твоя личная особенность. Мне, например, вполне достаточно увидеть ... и поверить, что метка afterLoop находится там, где и должна -- сразу за телом объемлющего цикла...


Дак в этом и дело, что break не надо проверять, при его встрече сразу понятно, что переход будет за тело цикла.
break более удобный в этом смысле аналог goto (вдруг-таки метка из goto не сразу за телом цикла)
Re[23]: готофобам к размышлению
От: Erop Россия  
Дата: 21.02.12 20:28
Оценка:
Здравствуйте, kvser, Вы писали:


K>Дак в этом и дело, что break не надо проверять, при его встрече сразу понятно, что переход будет за тело цикла.

K>break более удобный в этом смысле аналог goto (вдруг-таки метка из goto не сразу за телом цикл

Ну это будет ошибка. Очень редкая. Я, например, такого ни разу не встретил...

С другой стороны я не спорю, что брейк ещё удобнее, но для вложенных циклов в С/С++ брейка нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[22]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 21.02.12 20:46
Оценка:
Здравствуйте, Erop, Вы писали:

V>>Так же да не так же. В версии с флажками мне не надо нарушать порядка чтения кода, я просто продолжаю читать код последовательно, в версии с goto мне обязательно надо метку найти, чтобы посмотреть что там за код.

E>Это какая-то твоя личная особенность. Мне, например, вполне достаточно увидеть goto afterLoop;, чтобы предположить, что это какой-то досрочный выход из цикла, и поверить, что метка afterLoop находится там, где и должна -- сразу за телом объемлющего цикла...
E>Но я теперь, по крайней мере понял, что тебе в goto не нравится. Ты типа на goto глазами скачешь, а на break нет.
E>А ты не пробовал просто не скакать?
А код после метки ты уже знаешь? Или ты читаешь код сразу в обход глаз?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[23]: готофобам к размышлению
От: Erop Россия  
Дата: 21.02.12 21:04
Оценка:
Здравствуйте, Vain, Вы писали:


E>>А ты не пробовал просто не скакать?

V>А код после метки ты уже знаешь? Или ты читаешь код сразу в обход глаз?

Не понял. Это будет код после цикла. Ты, когда цикл читаешь, хочешь до того, как дочитаешь до конца, заглянуть за его тело? Если нет, то не ясно с чего вдруг такое желание возникает при выходе по гото...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[24]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 21.02.12 23:22
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>А ты не пробовал просто не скакать?

V>>А код после метки ты уже знаешь? Или ты читаешь код сразу в обход глаз?
E>Не понял. Это будет код после цикла. Ты, когда цикл читаешь, хочешь до того, как дочитаешь до конца, заглянуть за его тело?
Ну так обычно такой цикл и на экран не влезет.
E>Если нет, то не ясно с чего вдруг такое желание возникает при выходе по гото...
Потому-что в примерах что были метки стояли в конце функции.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[25]: готофобам к размышлению
От: Erop Россия  
Дата: 22.02.12 07:42
Оценка:
Здравствуйте, Vain, Вы писали:


V>>>А код после метки ты уже знаешь? Или ты читаешь код сразу в обход глаз?

E>>Не понял. Это будет код после цикла. Ты, когда цикл читаешь, хочешь до того, как дочитаешь до конца, заглянуть за его тело?
V>Ну так обычно такой цикл и на экран не влезет.
Ты на вопрос-то ответь...


E>>Если нет, то не ясно с чего вдруг такое желание возникает при выходе по гото...

V>Потому-что в примерах что были метки стояли в конце функции.

Читай примеры внимательнее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[26]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 22.02.12 10:25
Оценка:
Здравствуйте, Erop, Вы писали:

V>>>>А код после метки ты уже знаешь? Или ты читаешь код сразу в обход глаз?

E>>>Не понял. Это будет код после цикла. Ты, когда цикл читаешь, хочешь до того, как дочитаешь до конца, заглянуть за его тело?
V>>Ну так обычно такой цикл и на экран не влезет.
E>Ты на вопрос-то ответь...
Завист от кода. Но в общем случае я сначало цикл изучаю игнорируя все break и continue, с гоуту так не получится, надо сразу к метке лезть, её изучать.

E>>>Если нет, то не ясно с чего вдруг такое желание возникает при выходе по гото...

V>>Потому-что в примерах что были метки стояли в конце функции.
E>Читай примеры внимательнее...
Ну так как правило cleanup метки в конце функции ставят.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[27]: готофобам к размышлению
От: Erop Россия  
Дата: 22.02.12 12:00
Оценка:
Здравствуйте, Vain, Вы писали:

E>>Ты на вопрос-то ответь...

V>Завист от кода. Но в общем случае я сначало цикл изучаю игнорируя все break и continue, с гоуту так не получится, надо сразу к метке лезть, её изучать.
Почему? Просто предположи, что это выход из цикл, потом проверишь...

V>Ну так как правило cleanup метки в конце функции ставят.


Так мы о cleanup или о выходе из цикла? Их ещё и называют по-разному...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 23.02.12 11:32
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>Ты на вопрос-то ответь...

V>>Завист от кода. Но в общем случае я сначало цикл изучаю игнорируя все break и continue, с гоуту так не получится, надо сразу к метке лезть, её изучать.
E>Почему? Просто предположи, что это выход из цикл, потом проверишь...
Просто выход из цикла не бывает. Как правило после каждого цикла есть код, он же тебя не смущает. А почему обычное условие и брек должны?

V>>Ну так как правило cleanup метки в конце функции ставят.

E>Так мы о cleanup или о выходе из цикла?
Так вам шашечки или ехать? Вы демонстрируете goto ради самого goto?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[29]: готофобам к размышлению
От: Erop Россия  
Дата: 23.02.12 13:08
Оценка:
Здравствуйте, Vain, Вы писали:

E>>Почему? Просто предположи, что это выход из цикл, потом проверишь...

V>Просто выход из цикла не бывает. Как правило после каждого цикла есть код, он же тебя не смущает. А почему обычное условие и брек должны?
Ну, пока цикл невложенный, просто break'а вполне хватает. А вот из вложенного циткла уже приходится выходить по goto. Но я так и не понял в чём же там принуипиальное отличие от break, кроме того, что ты по каким-то своим внтренним причинам не умеешь читать код с goto...


E>>Так мы о cleanup или о выходе из цикла?

V>Так вам шашечки или ехать? Вы демонстрируете goto ради самого goto?
Ну я напомню тебе основное направление обсуждения. Тебя попросили показать чем плох goto сам по себе, на примере любой из двух распространённых практик его использования в НОРМАЛЬНЫХ программах.
1) выход из вложенных циклов в С++
2) в С goto cleanup

Дык проблем В ЭТИХ ДВУХ КОНКРЕТНЫХ СЛУЧАЯХ есть или нет?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 23.02.12 16:56
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>Почему? Просто предположи, что это выход из цикл, потом проверишь...

V>>Просто выход из цикла не бывает. Как правило после каждого цикла есть код, он же тебя не смущает. А почему обычное условие и брек должны?
E>Ну, пока цикл невложенный, просто break'а вполне хватает. А вот из вложенного циткла уже приходится выходить по goto.
А по встроенному условию цикла не приходиться выходить?

E>Но я так и не понял в чём же там принуипиальное отличие от break, кроме того, что ты по каким-то своим внтренним причинам не умеешь читать код с goto...

Вот оно как получается, чтение голых джампов в коде высокоуровневого языка это оказывается личные проблемы, а мужики то и не знали!

E>>>Так мы о cleanup или о выходе из цикла?

V>>Так вам шашечки или ехать? Вы демонстрируете goto ради самого goto?
E>Ну я напомню тебе основное направление обсуждения. Тебя попросили показать чем плох goto сам по себе, на примере любой из двух распространённых практик его использования в НОРМАЛЬНЫХ программах.
E>1) выход из вложенных циклов в С++
E>2) в С goto cleanup
E>Дык проблем В ЭТИХ ДВУХ КОНКРЕТНЫХ СЛУЧАЯХ есть или нет?
1. Нарушение потока выполнения, которое свойственно именно goto как таковому. Как следствие поиск метки — скроллирование экрана вверх/вниз. Случаи с простыми циклами не имеют смысла, там и без goto можно обойтись.
2. Отступы для меток, которые труднее ищутся.
3. Использование goto элементарно сподвигает программиста писать его и впредь, как результат страдает самодисциплина (тут уже про это говорилось). После этого goto импользуется не только там где это необходимо, но и везде, что как раз и способствует тому спагетти про которое и речь была.
4. Спроси ещё раз.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.