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

Поиск:

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


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Если отвечать на поставленный вопрос именно относительно Linux, то там ответ прозрачный и идет от его создателя - goto используется для оптимизации кода по скорости и используются особенности компилятора gcc.

А философские рассуждения - нужен goto или не нужен вообще. Даже матом выругаться бывает к месту. И если смотреть коды Linux, то если смотреть контекст, когда используется goto, достаточно все ясно и не вызывает проблем.
PM MAIL WWW ICQ   Вверх
Paradox
Дата 19.11.2002, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Процитирую HexoGenus:

Цитата
Когда мы вместо функций и циклов начинаем применять гото (а именно так обычно и поступают многие из-за того что лень чуть больше постучать по кнопочкам) то мы отказываемя от всех этих преимуществ...


По-моему тут дело не втом что лень лишний раз постучать по кнопочкам, а лень просто лишний раз сесть и немного подумать как можно обойтись без гото

Цитата
Примерно в 70-е годы проводился конкурс шахматных программ. Участники были представлены разными навороченными алгоритмами, написанными в силу их сложности на структурных языках. В то же время наша программа ("Каисса"?) была написана исключительно тупо и на ассемблере - те с goto. И что ? Победила именно она !


По-моему на асемблере трудно что то написать без гото а точнее без jz,jmp и т.д.
А еще в 70-х был Алгол 68 и Fortran со своей знаменитой записью идентификаторов и последующей ошибкой стоимостью 10 000 000 000$ :notify


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


Лентяй
***


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

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



Цитата
Я к тому, что на уровне кода цикл обычный не отличается от того же гото


На уровне кода нет ни имен, ни типов, ни классов. На уровне кода мы вообще имеем только цифры. Но это ничего не показывает.

2Chingachguk: А ты вообще не лезь в наш структурный мир.  :D
Chingachguk, ты пишишь на ассемблере, и ты мыслишь ассемблером. Мышление уже у тебя так натренировалось. Ты очень крут в своей области, но это не типично и мало подходит для  крупной командной разработки.
 Шахматная программа не сложна как программа. В ней сложны алгоритмы. Взаимодействий там довольно мало - она все обращена в себя.

Цитата
Если мы создаем цикл и внутри него переменную то сразу за его пределами она уничтожается за ненадобностью ... а если мы реализуем цикл через гото то область жизни переменной может стать чрезмерной излишне засоряя память


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

{
 PrepearWork();
 try
 {
   DoWork();
 }
 catch (EMyError err)
 {
   if (!NeedToFinishWork())
      goto Exit;
   PrepearErrorFinishWork();
 };
 FinishWithWork();
Exit:
}


Казалось бы все логично, но кому-то может оказаться невдомек, что объект err скорее всего должен был быть уничтожен при выходе из catch{}, однако этот этап мы перескочили.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Chingachguk
Дата 19.11.2002, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

HexoGenus Дата сообщения: 18.11.2002,14:50
{...}
Мое предложение такое давайте выложим не просто метафизические рассуждения хорошо или плохо а так:
В данных случаях будет польза: .........


Не вопрос:

Цитата

// Циклы вложенные, числом 3 или больше
for (i1=0;i1<End_I1;i1++)
{
  for (i2=0;i2<End_I2;i2++)
  {
    for (i3=0;i3<End_I3;i3++)
    {
     ...
     // Тут нам внезапно нужно сделать exit, но перед выходом необходимо
     // выполнить код после метки AllWorkDone
     // И самое естественное и короткое - это goto !
     goto AllWorkDone;
     ...
    }
  }
}

AllWorkDone:
// Например, закрытие хэндлов файлов и тп
close();
free... etc


_ЗЫ_1: Только не надо говорить мне, что есть локальные подпрограммы. В-первых, это ненужный довесок (чего он делает более понятным ?). Во-вторых, например у меня в BC.310 у меня их просто нет. Или я пишу для терминалов (сейчас) на СИ - TXO. И там тоже нет локальных подпрограмм.

_ЗЫ_2: Это был ход ..e7-e6, если Вы хотите играть белыми. И я знаю немало хороших продолжений ;)

Цитата

Paradox Дата сообщения: 18.11.2002,17:58
{...}
По-моему на асемблере трудно что то написать без гото а точнее без jz,jmp и т.д.
{...}


Можно, есть пакет под win32 со всей фигней типа IF, ELSE. Например, так можно писать даже VXD.

Цитата

Fantasist Дата сообщения: 18.11.2002,23:16
{...}
На уровне кода нет ни имен, ни типов, ни классов. На уровне кода мы вообще имеем только цифры. Но это ничего не показывает.


??? Это в ассемблере-то нету типов и классов ???
Да ООП есть даже в ассемблере ! (см. Тома Свана книгу).

Цитата

2Chingachguk: А ты вообще не лезь в наш структурный мир.  


Ж)

Цитата

Chingachguk, ты пишишь на ассемблере, и ты мыслишь ассемблером. Мышление уже у тебя так натренировалось. Ты очень крут в своей области, но это не типично и мало подходит для  крупной командной разработки.


А кто-то пробовал иначе - работать в команде на ассемблере ? Видимо, да. Вот примеры:

1. ДОС. Да, ДОС3+ очень грамотная и достаточно устойчивая, понятная разработчику ЛЮБОГО уровня система. Написана на ассемблере.
2. win98. Большая часть драйверов переписана на асм и от этого она сильно выиграла по сравнению с 95. Тоже была команда.

Цитата

Шахматная программа не сложна как программа. В ней сложны алгоритмы. Взаимодействий там довольно мало - она все обращена в себя.


Это был пример того, что главное - это Результат. Как бы тупо он не был написан. Если Петя напишет тупейший код через goto, а Маша - через классы, но Петина программа будет работать в 10 раз быстрее, то чью программу предпочтет пользователь ?


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Fantasist
Дата 20.11.2002, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Код
Это в ассемблере-то нету типов и классов
Да ООП есть даже в ассемблере !


С каких это пор ассемблере стал кодом? Вроде как был языком так и оставался. И даже если там есть что-то типа ООП, то уж точно по типизации ассемблер не сравниться с высокоуровневыми языками.

Цитата
А кто-то пробовал иначе - работать в команде на ассемблере ? Видимо, да. Вот примеры:

1. ДОС. Да, ДОС3+ очень грамотная и достаточно устойчивая, понятная разработчику ЛЮБОГО уровня система. Написана на ассемблере.


Chingachguk, а как ты думаешь, почему сейчас так мало пишут на ассемблере?
Я имею в виду цельные коммерческие проекты чисто на ассемблере? Покажите мне софтверную фирму, которая разрабатывает продукты хотя бы для среднего бизнеса на ассемблере. Ни в жизнь не поверю что такая есть. А ДОС могли и два человека написать.

[/QUOTE]2. win98. Большая часть драйверов переписана на асм и от этого она сильно выиграла по сравнению с 95. Тоже была команда
Цитата


 Много драйверов это еще не ядро. Драйвера они по большей части законченны. То есть каждый отдельный драйвер работает на уровне исполнения своего кода, а не на уровне использования собственно его кода для написания/подключения другого кода.

[QUOTE]Если Петя напишет тупейший код через goto, а Маша - через классы, но Петина программа будет работать в 10 раз быстрее, то чью программу предпочтет пользователь ?


Да конечно. Если ты, Chingachguk, напишишь операционную систему на асм, котороя будет быстрее и безглючнее чем Windows, и не будет уступать ей по возможностям, возможно многие пользователи предпочтут ее. Теперь, сколько шансов ее написать тебе в одиночку? Далее тебе понадобиться выпустить следующую версию, причем быстро. Надо же расширяться, продвигаться. Придут люди которых ты заставишь работать с твоим кодом, а его будет ОЧЕНЬ много. Каковы шансы, что они разберуться с ним быстро и правильно? Что они не повтыкают туда до фига глюков, ибо чего-то не заметили или на так поняли? Почему ты думаешь, слово "инкапсуляция", так часто витает в воздухе передового программерского мира? Все дело в том же - борьба за более строгую структурность, ибо только так можно поддерживать устойчивость при современных темпах и объемах разроботки программного обеспечения.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Fantasist
Дата 20.11.2002, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Кстати, а почему эта тема все еще не во флейме?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Vit
Дата 20.11.2002, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата(Fantasist @ 19.11.2002, 09:09)
Кстати, а почему эта тема все еще не во флейме?

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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 20.11.2002, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Не-а, здесь уже обсуждают философию программирования. К С++ это прямиком не относится.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
MadGhost
Дата 20.11.2002, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

У меня например никогда не вставал вопрос нужен гото или нет, я просто даже не знаю как и где метки ставить, оно мне не надо.

кодю на Delphi, C++.

т.е. реализация этих языков позволяет полностью избавить от ненужных GOTO.
PM MAIL   Вверх
Turboman
  Дата 13.12.2002, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Goto как goto... :D  :D  :D
PM MAIL   Вверх
Андрей
Дата 17.12.2002, 05:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











По-моему товарищ Chingachguk абсолютно прав по-поводу
использования goto для выхода из вложенных циклов. Я, например,
если и применяю его то только с этой целью.
Конечно, если посидеть да подумать можно организовать циклы
так, чтобы можно было обойтись и без goto, но зачем.
А вот слишком много их, это конечно не к месту.
Где-нибудь один раз на 1000 строк -- это вполне нормально.
  Вверх
Lelik12345
Дата 5.2.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



народ, помогите студентке, т.е. мне, очень надо!! smile
в общем прога состоит из диалога, там про возраст, есть функция goto? которая бесконечно все пишет, как мне из нее выти??? помогите плиз, или подскажите другую функцию бесконечную, которая автоматом выходит...пожалуйста!!! smile
Добавлено @ 00:23
ой забыла сказать, это все на С++3.1 на досе
PM MAIL   Вверх
Dreamer_0x01
Дата 5.2.2006, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Цитата(Lelik12345 @ 5.2.2006, 00:22 Найти цитируемый пост)

в общем прога состоит из диалога, там про возраст, есть функция goto

что значит состоит из диалога?

Цитата(Lelik12345 @ 5.2.2006, 00:22 Найти цитируемый пост)

которая бесконечно все пишет

Хм...Надо бы записать в афоризмы smile


Цитата(Lelik12345 @ 5.2.2006, 00:22 Найти цитируемый пост)

или подскажите другую функцию бесконечную,  которая автоматом выходит



Так. Давайте для начала выясним, что означают эти понятия.
А потом уже разберемся с вашей проблемой.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Partizan
Дата 5.2.2006, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



ж) телепаты в отпуске, так что код в студию....и желательно в отдельном топике...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
secado
Дата 6.2.2006, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если вы хотите использовать goto полезно будет знать следующее: по умолчанию, все операторы условные команды jmp в Assembler указывающие на предыдущие команды отмечаются как вероятно исполняемые (по модулю предсказанию переходов) - как составные части циклов, а те которые указывают далее по программе - как не исполняемые (счиатется, что jyb исполняют переход при невыполнении какого-то условия, if then .... else). Можно в ручном режиме указать модулю предсказания переходов возможность исполнения того или иного jmp, путем префикса - 2E (да) и 3E(нет)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0915 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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