Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оператор перехода goto, тру или нет? 
:(
    Опции темы
apook
Дата 14.12.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Вот статья как Умные дядьки изгнали GOTO из одного языка

Это сообщение отредактировал(а) apook - 14.12.2006, 23:53

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  i21__.7z 95,42 Kb


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
nikitao
Дата 15.12.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



Цитата(UniBomb @  15.12.2006,  00:05 Найти цитируемый пост)
то что такие программы трудно читать - это проблемы того, кто читает

Жесть.. smile ... Без комментариев. 


GrayCardinal,  smile 


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
UniBomb
Дата 15.12.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



nikitao

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


--------------------
PM MAIL ICQ Skype   Вверх
Rockie
Дата 15.12.2006, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(UniBomb @  14.12.2006,  21:11 Найти цитируемый пост)
ну вот, сидеть мне теперь со словарём допозна... Единственное что я понял, что оператор теоретически безопасен


Это если теоретически написать программу smile

Цитата(apook @  14.12.2006,  21:13 Найти цитируемый пост)
твою прогу (дизассембл) то участок кода напр:

как насчет тегов кода, запятых и полных слов? =) С примером согласен.

Цитата(JackYF @  14.12.2006,  21:25 Найти цитируемый пост)
К пример, выход из двойного и даже тройного цикла не считаю такой крайней необходимостью.


согласен, выход из таких циклов - imho пожалуй единственное оправдание этому оператору, и то с натяжкой 

Цитата(nikitao @  14.12.2006,  22:02 Найти цитируемый пост)
Про goto - это боян

 smile 

Цитата(UniBomb @  15.12.2006,  00:07 Найти цитируемый пост)
Спасение утопающик - дело рук самих утопающих (или как то так...).

Цитата(UniBomb @  14.12.2006,  23:05 Найти цитируемый пост)
 Прочтя все высказывания я понял одно - программиста от "кулхацкера" отличает как раз ниличие или отсутвие goto в коде их программ.
Цитата
А то что такие программы трудно читать - это проблемы того, кто читает


UniBomb, могут стать твои, если тебя уволят smile.
imho программиста от кулхацкера отличает наличие или отсутствие уважения к коллегам, которые твой код смотрят и с ним работают. Программа может быть написана грамотно и умно с точки зрения того, кто ее писал и быть абсолютным г@#;ом для остальных. И дело тут не в goto а в отношении.




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
UniBomb
Дата 15.12.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Rockie

Цитата

mho программиста от кулхацкера отличает наличие или отсутствие уважения к коллегам, которые твой код смотрят и с ним работают. Программа может быть написана грамотно и умно с точки зрения того, кто ее писал и быть абсолютным г@#;ом для остальных. И дело тут не в goto а в отношении.


Опять таки всё зависит от точки зрения. Но сабж пошёл не в то русло, поэтому, прекращая флуд, последнее слово пусть остаётся за тобой.


--------------------
PM MAIL ICQ Skype   Вверх
Любитель
Дата 15.12.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



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


--------------------
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 15.12.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(JackYF @  14.12.2006,  21:05 Найти цитируемый пост)
goto  нарушает естественное течение программы, т.е. невызов нужных конструкторов/деструкторов

А поподробней можно?
PM MAIL   Вверх
maxim1000
Дата 15.12.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



касательно невызывания конструкторов/деструкторов при использовании goto
это не свсем так:
если с помощью goto происходит выход из области видимости объекта, его деструктор вызывается
в то же время не допускается использование goto, которое приводит к пропуску конструкторов
P.S.
не то, чтобы я за него агитировал, но и лишнего ему приписывать не надо smile


--------------------
qqq
PM WWW   Вверх
JackYF
Дата 15.12.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(maxim1000 @  15.12.2006,  13:13 Найти цитируемый пост)
если с помощью goto происходит выход из области видимости объекта, его деструктор вызывается


Наверное, ты прав.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
SaDFromSpb
Дата 15.12.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Что касается меня, то с тех пор, как препод нам давным давно сказал, что goto - это от дьявола, и что использующий его да будет гореть в геене огненной, так ни разу им и не воспользовался. Считаю, что код можно сделать красивым и удобочитаемым без оператора goto, уж по крайней мере в С++.
По поводу ядра линукс: его пишут особые люди с особым складом программистского ума =). Если начинать прогать с asm'а =), то отказ от оператора goto сперва покажется чем-то диким, наверное. (Хотя кто в наши времена начинает с asm'а? =) )

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

П.С.: Прошу заметить, что ярым противником goto не являюсь. Хотя был бы неприятно удивлен увидеть его в коде матерого прикладного приложения, написанного на оо языке. Когда он действительно вреден, так это когда его используют начинающие, вместо того, чтобы лучше продумать заковыристый кусок алгоритма.

Это сообщение отредактировал(а) SaDFromSpb - 15.12.2006, 23:18


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
UnrealMan
Дата 16.12.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(maxim1000 @  15.12.2006,  13:13 Найти цитируемый пост)
если с помощью goto происходит выход из области видимости объекта, его деструктор вызывается

Цитата(JackYF @  15.12.2006,  16:23 Найти цитируемый пост)
Наверное, ты прав.

Не наверное, а точно:

Цитата(ISO/IEC 14882:2003(E) 6.6 Jump statements)
On exit from a scope (however accomplished), destructors (12.4) are called for all constructed objects with automatic storage duration (3.7.2) (named objects or temporaries) that are declared in that scope, in the reverse order of their declaration. Transfer out of a loop, out of a block, or back past an initialized variable with automatic storage duration involves the destruction of variables with automatic storage duration that are in scope at the point transferred from but not at the point transferred to.

Цитата(maxim1000 @  15.12.2006,  13:13 Найти цитируемый пост)
в то же время не допускается использование goto, которое приводит к пропуску конструкторов

Пропуску любой инициализации вообще:

Цитата(ISO/IEC 14882:2003(E) 6.7 Declaration statement)
It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).

[Example:
Код
void f()
{
    // ...
    goto lx; // ill-formed: jump into scope of a
    // ...
ly:
    X a = 1;
    // ...
lx:
    goto ly; // OK, jump implies destructor
    // call for a followed by construction
    // again immediately following label ly
}
—end example]

Цитата(maxim1000 @  15.12.2006,  13:13 Найти цитируемый пост)
но и лишнего ему приписывать не надо 

Вот-вот.

Это сообщение отредактировал(а) UnrealMan - 16.12.2006, 11:53
PM MAIL   Вверх
FelikZ
  Дата 16.12.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



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


--------------------
user posted image
PM WWW ICQ Skype   Вверх
zabivator
Дата 16.12.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Читал тему, с кем-то согласен, с кем-то не очень.
Один момент! Вот представьте себе, что идет обход дерева через рекурсивный вызов метода...допустим, для поиска определенного элемента. Использование goto либо кидание исключения мне кажется куда более гуманным, чем традиционные методы.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
vinter
Дата 17.12.2006, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



по мне так goto - зло для человека, который читает чужой(большой) код, особенно если goto кидает куда-нить за пределы видимой страницы.. натерпелся с этими метками в асме, в С\С++ ни разу не использовал(надеюсь и не буду) и живу нормально..
 smile 
P.S народ че случилось с аватарами некоторых участников, я народ путаю.. smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
bel_nikita
Дата 17.12.2006, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата(nikitao @ 14.12.2006,  21:02)
С другой стороны я пожалуй соглашусь с Void , который говорил , что goto при правильном проектировании просто не нужен. 
Отсутствие goto должно стать для программиста не целью , а  результатом накопления им опыта )

считаю наоборот smile Использование оператора goto результат опытности и зрелости smile А то, что нарушает читабельность кода, то это проблема не goto, а кривых рук и недокументирования кода. По опыту копания в чужих листингах можно сказать: что и без оператора goto можно написать так, что хрен поймешь что у человека было в голове, чем он думал и что курил, когда писал код. И в тоже время можно увидеть код с goto, который читается, как интересная книга, на одном дыхании


З.Ы.: Если профессор на лекциях говорит студентам, что goto - от дьявола, правду говорит, дабы уберечь молодой организм от злоупотребления и заставить задуматься над проектированием. Но потом, через пару лет, при определенных обстоятельствах, вы вспомните о всемогущем goto и все же используете его... но это уже будет не зеленый студент, а зрелый программист smile 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0981 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.