Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Оператор goto


Автор: Sun 19.9.2002, 20:30
Все знают что "goto" это плохо, но почему в ядре Linux он встречается почти в каждом модуле? Или настоящие программеры не боятся оператора "goto"?

Автор: FdX 19.9.2002, 23:00
Цитата
Или настоящие программеры не боятся оператора "goto"?


Ага.

Ну а вообще не достаточно просто уметь_писать на С++. Надо знать ещще тонкости вроде работы со стеком (на уровне комманд асма) при вызове функций и тому подобные вещи.

Если знаешь, как все пашет, проги не будут глючить

Автор: Grey 19.9.2002, 23:13
Плохо, когда лепят его где непопадя.
Хорошо, когда использование goto упрощает код и облегчает его понимание.
А догматичные запреты на его использование, это полный бред помоему.

Автор: Baa 19.9.2002, 23:53
На самом деле, ничего плохого нету в goto. Просто это считается дурным тоном...Вспомним ассемблер...там без меток - это маразм...Да и ведь goto - это ведь инструкция jmp, а её используют циклы и т.д.

Автор: Tamerlann 17.11.2002, 07:25
А зачем вообще использовать goto, когда в С++ уже всё необходимое есть: циклы, if'ы и процедуры. Мне кажется, прога построенная на процедурах гораздо легче читается и понимается, никогда не запутаешся. :)

Автор: Fantasist 18.11.2002, 08:53
Код
На самом деле, ничего плохого нету в goto. Просто это считается дурным тоном...Вспомним ассемблер...


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

...
goto  SorryGuysICantBelieveIDidThat;
....
...
SorryGuysICantBelieveIDidThat:
...


:)

Автор: Baa 18.11.2002, 10:39
Я к тому, что на уровне кода цикл обычный не отличается от того же гото.
А про удобочитаемость, дык тут тоже не всегда верно... Есть варианты, когда гото читается легче, чем циклы. (токо вот я их превисти не могу ;-) )
з.ы. а сам я гото не использую почему-то ;-) даже в прогах для себя... видать наставление не использовать гото отложилось в подсознании ;-)

Автор: Vano 18.11.2002, 14:20
Тут все про циклы, а вот я знаю пример использования goto в фунции, вместо того чтоюы плодить сотни рекурсивных вызовов ее, и что структурнее и в чем прще разобраться это еще вопрос (это из области создания компиляторов, если пример интересный могу привести)

Автор: Vit 18.11.2002, 14:45
Fantasist правильно сказал. Если кому-то удобно использовать Goto пусть использует, беды никакой нет, а вот если в комманде работаешь, то я бы крайне не рекомендовал - могут быть серьёзные проблемы. Я пару месяцев назад вынужден был работать с кодом моего коллеги, который очень уж охоч до Goto - на сотой строке я уже готов был его убить, после тысячной я уже всерьёз задумался не надо ли сходить к начальству и попросить спустить директиву о запрещении пользования Goto программистами компании...

Автор: Alex101 18.11.2002, 17:45
Цитата(Baa @ 18.11.2002, 02:39)
Я к тому, что на уровне кода цикл обычный не отличается от того же гото.

Ну, все же для цикла с пареметром есть команда loop ...
А насчет goto...
Есть программа генерации перестановок в нерекурсивном варианте, так там
goto очень даже к месту...

Автор: HexoGenus 18.11.2002, 18:43
Цитата(Guest @ 18.11.2002, 06:20)
Тут все про циклы, а вот я знаю пример использования goto в фунции, вместо того чтоюы плодить сотни рекурсивных вызовов ее, и что структурнее и в чем прще разобраться это еще вопрос (это из области создания компиляторов, если пример интересный могу привести)

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

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

Ну так что ???

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

(Надеюсь всем присутствующим не нужно объяснять почему компьютер для большинства расчетов лучше чем счеты? Часть размышлений по этому поводу опускаю...)

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

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

Теперь, что нам говорят любители использовать гото и любители использовать счеты:
1. Некоторые реализации более легко читаемы если использовать гото...
1. Некоторые расчеты быстрее сделать используя счеты...
2. Тут все про циклы, а вот я знаю пример использования goto в фунции, вместо того чтобы плодить сотни рекурсивных вызовов ее, и что структурнее и в чем прще разобраться это еще вопрос ...
2. Тут все говорят про компьютеры а я вот баланс своего ларька подбила используя тетрадь и счеты быстрее многих финансистов...
3. Все знают что "goto" это плохо, но почему в ядре Linux он встречается почти в каждом модуле? Или настоящие программеры не боятся оператора "goto"? (Дело в том что ядро операционной системы должно быть максимально скоростным и поэтому там используется ручная оптимизация кода - что является уделом программистов которые для меня боги, которым кажется что разница в скорости выполнения MOV AX,0 и SUB AX,AX понятна и ёжику, там используется тесная связь с ассемблером а он без оператора безусловного перехода становится очень громоздким)  
3. Почему говорят что в расчетах надо использовать компьютеры... Вот я на столе у главбуха тоже видела счеты (калькулятор) и хотя рядом стоит компьютер ОН счетами тоже пользуется!!!!! Так значит компьютер не нужен!!!! Это сколько же нужно выучить, его еще и купить нужно... Зачем он нам нужен когда есть счеты!!!!

Надеюсь никого не обидел ??? Я просто хотел свою мысль сделать ярче... ;-)

Теперь скажите мне вы будете уважать бухгалтера который не смотря на то что рядом стоит компьютер иногда использует счеты ?  :D Конечно будете...
Но если зайдете на форум бухгалтеров и увидете бухгалтера который будет поливать помоями компьютеры и кричать что счеты это руллез форева и он не согласен с тем что их нельзя использовать в бухгалтерии ???

Это будет просто показатель его низкой профессиональной грамотности (не в смысле что он бухгалтерию плохо знает а в том смысле что он и сам будет перед каждым отчетом сидеть по уши в бумагах и своих подчиненных будет долбать как дятел за то что они ему долго ведомости ручками переписывают хотя он и попросил всего три экземпляра простыни на 5 метров  :D )

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

Автор: Paradox 18.11.2002, 19:14
HexoGenus по-моему тут никто не кричал гото рулезз форева...
Человек, который сразу хватается за компьютер это не программист, или по крайней мере бестолковый программист. Толковый же в свою очередь сначала подумает как и что он будет делать а уж потом хватается.
И вот если я к примеру в процессе работы над некоторой проблеммой прихожу к выводу что гото будет к месту (а все реализации без гото либо потребуют больших усилий, либо сделают программу нечитаемой) я его использую.
Оговорюсь сразу:в профессиональной деятельности я еще ни разу гото не использовал, но предубеждений по поводу его использования у меня нет.

Этот вопрос сродни тому хорошо ли иметь в программе глобальные переменные или нет. По этому поводу можно дискуссию развести еще больше этой.

Кстати интересно, какой трактат по этому поводу напишет HexoGenus

Автор: HexoGenus 18.11.2002, 21:50
Цитата(Paradox @ 18.11.2002, 11:14)
HexoGenus по-моему тут никто не кричал гото рулезз форева...

Я не говорю что здесь кто то об этом кричал но постоянно кто нибудь это тему в форумах нет нет да и поднимет  :D
Цитата

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

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

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

Ты вообще до конца мой фельетончик прочитал ???
Или не вытерпел и сразу ответ написал... :angry:
Я же там понятно написал что я не против использования гото там где это действительно необходимо а против постоянных попыток доказать что он нужен...

Повторю еще раз... это показывает не только уровень непрофессионализма но и то что человек не хочет прислушиваться к мнению профессионалов ...

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

Цитата

Этот вопрос сродни тому хорошо ли иметь в программе глобальные переменные или нет. По этому поводу можно дискуссию развести еще больше этой.


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

Разве это называется ПРЕДУБЕЖДЕННОСТЬ?

Цитата

Кстати интересно, какой трактат по этому поводу напишет HexoGenus


Заказывали? Получите... распишитесь... :D

Автор: Chingachguk 18.11.2002, 22:06
Цитата

HexoGenus Дата сообщения: 18.11.2002,10:43

Теперь, что нам говорят любители использовать гото и любители использовать счеты:
1. Некоторые реализации более легко читаемы если использовать гото...


Именно так. Лично я пробовал и без него (писал и пишу на Pas,C,Asm...) так и с ним (Pas,C,Asm,..). Да, я не оговорился - пакет win32 masm позволяет писать на ассемблере в струкутрном виде (с IF,ELSE...). Иногда лучше так, иногда - нет. А ВЫ пробовали его использовать, или только цитируете классиков ?

Цитата

1. Некоторые расчеты быстрее сделать используя счеты...


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

Цитата

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


Все верно. Главное - результат. Если ваша БД, написанная на "структурном" языке со всякими моделями в RWin добавляет 1 запись 60 секунд, то нафиг ее.

Цитата

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


Видимо, те люди предпочитают все проверить и выбрать ЛУЧШЕЕ, а не верить многократно скопированным изречениям.

Автор: HexoGenus 18.11.2002, 22:50
Цитата(Chingachguk @ 18.11.2002, 14:06)
Видимо, те люди предпочитают все проверить и выбрать ЛУЧШЕЕ, а не верить многократно скопированным изречениям.

Хммммм.... ну спасибо  :D
ну хорошо давайте так...
гото позволяет в любой момент перейти в другую точку программы так???
этим самым достигается то что какая то часть программы может использоваться повторно не более того...?
Что еще реализует эту идею?
Циклы для многократного повтора подряд и функции для повтора рекурсивного или непериодического...

Что несут в себе полезного циклы?
1. Задание области видимости переменных которые не будут нужны за пределами цикла...
2. Повышенная наглядность при чтении программы...

Что несут в себе полезного функции?
Да замучаешься перечислять... тут и удобная передача аргументов и ... и... да возьми любую книжку по С и поймешь что именно благодаря тому что здесь наглядно определяются функции этот язык и получил такую популярность...

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

Когда гото получает преимущество перед конструкциями языков высокого уровня?
Как только нужно максимально все ускорить, ведь на вызовы функций и передачу им аргументов идет время... а если нужен цикл вечный то что может быть проще гото... ;-)

Мое предложение такое давайте выложим не просто метафизические рассуждения хорошо или плохо а так:
В данных случаях будет польза: .........
В данных случаях будет вред: .........
:baaa

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

А философские рассуждения - нужен goto или не нужен вообще. Даже матом выругаться бывает к месту. И если смотреть коды Linux, то если смотреть контекст, когда используется goto, достаточно все ясно и не вызывает проблем.

Автор: Paradox 19.11.2002, 01:58
Процитирую HexoGenus:

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


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

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


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

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


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

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

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


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

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


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

Автор: Chingachguk 19.11.2002, 17:46
Цитата

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 раз быстрее, то чью программу предпочтет пользователь ?

Автор: Fantasist 20.11.2002, 02:07
Код
Это в ассемблере-то нету типов и классов
Да ООП есть даже в ассемблере !


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

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

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


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

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


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

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


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

Автор: Fantasist 20.11.2002, 02:09
Кстати, а почему эта тема все еще не во флейме?

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

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

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

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

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

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

т.е. реализация этих языков позволяет полностью избавить от ненужных GOTO.

Автор: Turboman 13.12.2002, 16:53
Goto как goto... :D  :D  :D

Автор: Андрей 17.12.2002, 05:04
По-моему товарищ Chingachguk абсолютно прав по-поводу
использования goto для выхода из вложенных циклов. Я, например,
если и применяю его то только с этой целью.
Конечно, если посидеть да подумать можно организовать циклы
так, чтобы можно было обойтись и без goto, но зачем.
А вот слишком много их, это конечно не к месту.
Где-нибудь один раз на 1000 строк -- это вполне нормально.

Автор: Lelik12345 5.2.2006, 00:22
народ, помогите студентке, т.е. мне, очень надо!! smile
в общем прога состоит из диалога, там про возраст, есть функция goto? которая бесконечно все пишет, как мне из нее выти??? помогите плиз, или подскажите другую функцию бесконечную, которая автоматом выходит...пожалуйста!!! smile
Добавлено @ 00:23
ой забыла сказать, это все на С++3.1 на досе

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

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

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

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

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

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


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

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



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

Автор: Partizan 5.2.2006, 02:06
ж) телепаты в отпуске, так что код в студию....и желательно в отдельном топике...

Автор: secado 6.2.2006, 08:17
Если вы хотите использовать goto полезно будет знать следующее: по умолчанию, все операторы условные команды jmp в Assembler указывающие на предыдущие команды отмечаются как вероятно исполняемые (по модулю предсказанию переходов) - как составные части циклов, а те которые указывают далее по программе - как не исполняемые (счиатется, что jyb исполняют переход при невыполнении какого-то условия, if then .... else). Можно в ручном режиме указать модулю предсказания переходов возможность исполнения того или иного jmp, путем префикса - 2E (да) и 3E(нет)

Автор: Goganchic 7.5.2007, 07:38
Прочитал сейчас всю тему: чуть глаза из орбит не выкатились.
Попытаюсь ответить на все: гоуту - зло. Тут приводился пример с линуксом, насчет ручной оптимизации и применения фишек GCC это да, есть такое, и еще, насчет кода ядра, вы когда нибудь читали документацию если не ко всему ядру, то хотя бы к каким-нибудь его инфраструктурам? Я читал доки к netfilter'y и там ясно написано, что код писал хомяк, а чел только записывал коменты с его (хомяка) слов. smile Вот такие линуксойды весселые smile
Еще был пример с вложенным циклом, мне по этому поводу мой бывший препод информатики, у которого опыт практической разработки прог (т.е. он не просто теоретик, а так сказать заслуженный практик программирования) говорит так: не надо создавать такие ситуации чтобы были вложенные циклы из которых надо выходить сразу во вне и все будет хорошо.

Автор: MAKCim 7.5.2007, 09:37
Цитата(Goganchic @  7.5.2007,  07:38 Найти цитируемый пост)
Еще был пример с вложенным циклом, мне по этому поводу мой бывший препод информатики, у которого опыт практической разработки прог (т.е. он не просто теоретик, а так сказать заслуженный практик программирования) говорит так: не надо создавать такие ситуации чтобы были вложенные циклы из которых надо выходить сразу во вне и все будет хорошо. 

как говорится, ну-ну  smile 
Цитата(Goganchic @  7.5.2007,  07:38 Найти цитируемый пост)
гоуту - зло

просто не хочется в очередной раз доказывать, что ты не прав  smile 

Автор: Goganchic 7.5.2007, 12:23
MAKCim, мы говорим о Си или о Си++? Если последнее, то там гоуту просто не нужен, т.к. имеется механизм исключений, который может заменить гоуту, причем в более наглядной форме.

Автор: 0lmer 7.5.2007, 13:04
Лично я за недолгие 3 года программирования использовал готу не больше 4 раз для выхода из циклов поскольку без него размер кода увеличивался а читабельность уменьшалась.

По моему сам по себе готу не есть зло, зло - это когда его криво используют.
(это типа оружия: стреляет не оно само а человек который его держит) 

Автор: JackYF 7.5.2007, 16:58
Цитата(Goganchic @  7.5.2007,  12:23 Найти цитируемый пост)
Если последнее, то там гоуту просто не нужен, т.к. имеется механизм исключений, который может заменить гоуту, причем в более наглядной форме. 


Хе. А скорость?
И далеко не факт, что в более понятной.

Автор: MAKCim 7.5.2007, 19:43
Цитата(JackYF @  7.5.2007,  16:58 Найти цитируемый пост)
Хе. А скорость?

а вот скорость на порядок снижается

Добавлено через 1 минуту и 30 секунд
Цитата(Goganchic @  7.5.2007,  12:23 Найти цитируемый пост)
мы говорим о Си или о Си++? Если последнее, то там гоуту просто не нужен, т.к. имеется механизм исключений, который может заменить гоуту, причем в более наглядной форме.

а ты сказал
Цитата(Goganchic @  7.5.2007,  07:38 Найти цитируемый пост)
гоуту - зло

применительно к чему?

Автор: Anikmar 7.5.2007, 20:21
Цитата(MAKCim @  7.5.2007,  19:43 Найти цитируемый пост)
а вот скорость на порядок снижается

А то и больше.

Цитата(Goganchic @  7.5.2007,  12:23 Найти цитируемый пост)
MAKCim, мы говорим о Си или о Си++? Если последнее, то там гоуту просто не нужен, т.к. имеется механизм исключений, который может заменить гоуту, причем в более наглядной форме. 


ИМХО
Исключения ни коим образом не сделаны для замены goto - слишком серьезный механизм, из пушки по воробьям.
Если есть три-четыре вложенных цикла, из гущи которых нужно быстро выпрыгнуть, то при использовании механизма исключений будут очень ощутимые тормоза. При использовании дополнительных флагов - резко потеряется читабельность.
А вот при наличии goto и удобочитаемой метки, да еще в обозримом пространстве программы - дешево и сердито. Всем понятно и красиво.

Автор: Goganchic 7.5.2007, 22:24
Как сказал 0lmer, goto это оружие, ну так вот, оружие тоже разным бывает: одним владеть можно научиться легко, а другим можно и руки себе отхряпать, если ты не шаолиньский манах. Ну так вот, для широких масс goto это зло, я не спорю, что сливки программистского общества могут использовать этот оператор красиво и безопасно, но когда каждый второй начинает закашивать под профессионала, то получается сущая неразбериха и трудновыловимые баги. Себя я не отношу к сливкам программистского общества, поэтому goto не использую.
Теперь насчет исключений: по-моему, в Си++ многие вещи "жутко тормозят", но как известно, они позволяют сделать код более читаемым и кратким (при соответствующей документации и соблюдении стандартов кодирования, конечно, я не пытаюсь сказать, что любой Вася Пупкин сядет за Си++ и сразу же сделает офигительный шедевр). Современное оборудование может спокойной существовать с небольшой "тормознутостью", причем последняя будет не очень заметна (вы уж извините, но не каждый сидить и с секундомером измеряет за сколько времени у него загрузилась картинка, за 1 сек. или за 1.5). Так что вывод таков: если приложение не критично по скорости (если приложение - мощный веб-сервер, для которого 10% потеря в скорости подобна смерти, то тут я даже спорить не буду - все средства оптимизации хороши), то от использования конструкции goto можно отказаться вполне.
Это мое мнение, может оно и не правильное, но я так думаю.

Автор: Anikmar 7.5.2007, 23:00
Цитата(Goganchic @  7.5.2007,  22:24 Найти цитируемый пост)
Так что вывод таков: если приложение не критично по скорости (если приложение - мощный веб-сервер, для которого 10% потеря в скорости подобна смерти, то тут я даже спорить не буду - все средства оптимизации хороши), то от использования конструкции goto можно отказаться вполне.


По-моему весь спор о том, что можно от него отказаться или нужно. Конечно можно! Только вот вопрос: если с goto удобнее что-то сделать нужно ли  менять логику программы, нагромождать скобки и условия с циклами, чтобы обойтись без него?

Я даже встречал где-то мнение: Если вам не обойтись без goto пересмотрите логику вычислений...

Ну-ну. Мы программируем, чтобы получить результат или текст программы на высокоуровневом языке без оператора goto? Смотря кто какую себе цель ставит  smile 
Цитата(Goganchic @  7.5.2007,  22:24 Найти цитируемый пост)
Теперь насчет исключений: по-моему, в Си++ многие вещи "жутко тормозят", но как известно, они позволяют сделать код более читаемым и кратким 

ИМХО. Код программы должен быть понятен для сопровождения. Но это не значит, что его надо писать ради сопровождения. Это не стихи - готовый продукт все-таки работающая программа. И если картинка грузится на 30 секунд дольше, а потом этот "легкий для сопровождения" код без доделок попадает в другую программу, где таких картинок нужно вывести 100 - получим 50 минут  smile  И благодраность от конечного пользователя.

ИМХО
Нет только черного и белого. За разумный компромис! 

Цитата(Goganchic @  7.5.2007,  22:24 Найти цитируемый пост)
в Си++ многие вещи "жутко тормозят", 

Ну уж тут точно скорость от рук на 99% зависит! На мой взгляд Си++ позволяет писать очень скоростные программы (с goto или без - это как раз вторично). Вопрос правильного применения.

Автор: Goganchic 7.5.2007, 23:08
AnikmarMAKCimJackYF0lmer, в общем я понял свой просчет: мы просто говорим о разных степенях слова "отказаться", просто в моем понимании отказаться, значит использовать только при очень крайней необходимости smile

Автор: srd 8.5.2007, 06:18
Гм, если отвлечься от Си++ и поговорить о Си, то я вообще не вижу альтернативы goto.
Код

void some_function()
{
    ...
    if (!invoke_some_api())
        goto cleanup;
    ...
    if (invoke_other_api())
        goto cleanup;

cleanup:
    чистим память
    освобождаем ресурсы
}

Как это сделать без goto? Можно завести переменную для хранения статуса и проверять её перед каждым действием. Можно воспользоваться известным трюком с do {} while(0) и вываливаться из цикла по break, если что-то сломалось. Но мне кажется, что goto и проще и понятней smile

З.Ы.
Видел имитацию исключений в Plain C с помощью setjmp/longjmp, завёрнутых в макросы типа TRY/CATCH etc

Автор: nerezus 8.5.2007, 08:12
Цитата

(это из области создания компиляторов, если пример интересный могу привести
 Мм, state machine? Нам тоже пропод твердил, что надо юзать goto, чтобы в условиях не захлебнуться. 
Однако я так и не понял, нахрена: когда писал сам, то у меня была только 2ая уровень вложеенности условий. Как и в примере.

Автор: Vyacheslav 8.5.2007, 10:23
Цитата(0lmer @  7.5.2007,  13:04 Найти цитируемый пост)
Лично я за недолгие 3 года программирования использовал готу не больше 4 раз для выхода из циклов поскольку без него размер кода увеличивался а читабельность уменьшалась.

Лично я за 12 лет работы на С++ не использовал его никогда. Не то что бы из приниципа. Просто так получалось.

Добавлено @ 10:30
Цитата(MAKCim @  7.5.2007,  19:43 Найти цитируемый пост)
а вот скорость на порядок снижается


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

Цитата(srd @  8.5.2007,  06:18 Найти цитируемый пост)
Как это сделать без goto? 

Данный пример для С не катит smile 
Код


 void some_function()
{
    ...
    if (invoke_some_api()) {
     ...
       if (invoke_other_api()) {
          ....
       }
   }
        
    чистим память
    освобождаем ресурсы
}
 


Автор: Anikmar 8.5.2007, 10:51
Цитата(Vyacheslav @  8.5.2007,  10:23 Найти цитируемый пост)
Ну и к тому же мой опыт показывает, что при создании больших программныъ комплексов, главное не быстродействие, а читаемость кода.  


Спор вялотекущий и ни очем, конечно.

Видимо я старомодный. Но объяснять пользователю, в ответ на его претензии к быстродействию "Зато посмотрите, какой читаемый код" я вижу не совсем правильным. То что исключения разворачиваются по времени действительно на порядок медленнее - уже точно обсуждалось, когда спорили что лучше: возврат кода ошибки или исключение. 

Автор: srd 8.5.2007, 11:18
Цитата(Vyacheslav @  8.5.2007,  17:23 Найти цитируемый пост)
Данный пример для С не катит

То есть предлагаешь кучу вложенных if-ов ради того, чтобы избежать goto? Это ещё хуже smile

Автор: Goganchic 8.5.2007, 11:51
srd, про си отдельный разговор: в си goto - необходимость

Автор: Goganchic 8.5.2007, 13:08
Цитата(Anikmar @  8.5.2007,  10:51 Найти цитируемый пост)
Видимо я старомодный. Но объяснять пользователю, в ответ на его претензии к быстродействию "Зато посмотрите, какой читаемый код" я вижу не совсем правильным. То что исключения разворачиваются по времени действительно на порядок медленнее - уже точно обсуждалось, когда спорили что лучше: возврат кода ошибки или исключение.  

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

Автор: Vyacheslav 8.5.2007, 14:31
Цитата(Anikmar @  8.5.2007,  10:51 Найти цитируемый пост)
Видимо я старомодный. Но объяснять пользователю, в ответ на его претензии к быстродействию "Зато посмотрите, какой читаемый код" я вижу не совсем правильным. То что исключения разворачиваются по времени действительно на порядок медленнее - уже точно обсуждалось, когда спорили что лучше: возврат кода ошибки или исключение.  

Вы  просто никогда не занимались поддержкой долгоживущих комплексов, когда код напиман в команде, причем от первоначальной команды уже никого нет в наличии.  Вы так же наверное не выполняли CR( change request) и  не видели удивленного взгляда заказчика, когда они видел количество часов, в которые это выливалось.  А что делать? Если вместо читаемого кода  и централизованного отлова ошибок автор занимался никому не нужной оптимизацией и отлавливанием эксепшенов по месту и привращеним их в коды возврата с последущим goto. 
 

Автор: HappyLife 8.5.2007, 14:42
А мне вот интересно, наступит ли момент, когда каждый перестанет спорить, с тем у кого больше или меньше опыта. Неужели всем так важно доказать свою правоту, вместо того чтобы жить, программировать как удобно, так как подсказывает опыт, так как умеешь. Так как требует ситуацию. 

Автор: Vyacheslav 8.5.2007, 14:57
Цитата(HappyLife @  8.5.2007,  14:42 Найти цитируемый пост)
А мне вот интересно, наступит ли момент, когда каждый перестанет спорить, с тем у кого больше или меньше опыта. Неужели всем так важно доказать свою правоту, вместо того чтобы жить, программировать как удобно, так как подсказывает опыт, так как умеешь. Так как требует ситуацию.  

Вы противоречите сами себе smile

Цитата(HappyLife @  8.5.2007,  14:42 Найти цитируемый пост)
когда каждый перестанет спорить, с тем у кого больше или меньше опыта

и
Цитата(HappyLife @  8.5.2007,  14:42 Найти цитируемый пост)
программировать ... так как подсказывает опыт


А вот это
Цитата(HappyLife @  8.5.2007,  14:42 Найти цитируемый пост)
программировать как удобно, так как умеешь

весьма спорно.  Иногда при постановке вопроса "как удобно,  как умеешь" выясняется , что такого программирования никому, кроме Вас, не надо. 


Автор: Goganchic 8.5.2007, 15:13
Vyacheslav, полностью согласен

Автор: popovda 8.5.2007, 15:24
"А зачем вообще использовать goto".
Например, затем, чтобы из нескольких вложенных циклов изящно выйти. C++ - это не Фортран 90/95, где есть имена циклов - т.н. безопасные метки. Очень удоно, кстати. А если применять goto не в пределах всего кода, а лишь в пределах блока {...} и не использовать его вместо if-else или switch, то все нормально и красиво. Весь ассемблер - это сплошные goto (jmp), и все довольны.

Автор: Anikmar 8.5.2007, 15:39
Цитата(Goganchic @  8.5.2007,  13:08 Найти цитируемый пост)
Зато с твоей стороны ситуация просто супер, когда пользователь говорит, а я вот хочу еще одну маленькую фичку, на что ему начинают объяснять, что мол мы сможем сделать тебе такую фичку только за пол года, т.к. у нас код очень производительный и понимает его только компилятор. 

Если вы посмотрите мое отношение к goto - я никогда не приветствую его применение, если это запутывает код. Мой пост относился к мнению, что исключения призваны заменить goto с чем я не согласен. Если нужно запутать код - то и с goto и без оного его можно сделать просто нечитаемым.
Цитата(Vyacheslav @  8.5.2007,  14:31 Найти цитируемый пост)
Вы  просто никогда не занимались поддержкой долгоживущих комплексов, когда код напиман в команде, причем от первоначальной команды уже никого нет в наличии. 

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

Цитата(HappyLife @  8.5.2007,  14:42 Найти цитируемый пост)
А мне вот интересно, наступит ли момент, когда каждый перестанет спорить, с тем у кого больше или меньше опыта. Неужели всем так важно доказать свою правоту, вместо того чтобы жить, программировать как удобно, так как подсказывает опыт, так как умеешь. Так как требует ситуацию.  

Это спором назвать сложно - так как нету особого повода для спора. Тут скорее обмен мнениями - кто с чем сталкивался на практике.

Цитата(Vyacheslav @  8.5.2007,  14:31 Найти цитируемый пост)
Если вместо читаемого кода  и централизованного отлова ошибок автор занимался никому не нужной оптимизацией и отлавливанием эксепшенов по месту и привращеним их в коды возврата с последущим goto. 

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

Цитата(Vyacheslav @  8.5.2007,  14:31 Найти цитируемый пост)
никому не нужной оптимизацией и отлавливанием эксепшенов по месту и привращеним их в коды возврата с последущим goto

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

Автор: Goganchic 8.5.2007, 16:56
Цитата(Anikmar @  8.5.2007,  15:39 Найти цитируемый пост)
Тут перечислены все беды - и исключения и коды возврата и goto. Я то высказывал мнение, что нельзя использовать однозначно что-нибудь одно - для каждой ситуации нужно находить элегантный, понятный и быстрый код насколько это, конечно возможно.

как показывает практика в 99% случаев это код без goto smile

Автор: Anikmar 9.5.2007, 00:42
Цитата(Goganchic @  8.5.2007,  16:56 Найти цитируемый пост)
как показывает практика в 99% случаев это код без goto  

Полностью согласен. Но ради 1% goto и существует  smile 

Автор: Жуть 9.5.2007, 12:03
для 0.00001%

Добавлено через 1 минуту и 35 секунд
хотя яб добавил еще пару "0" между "." и "1"

Автор: Goganchic 9.5.2007, 12:35
Anikmar, точно smile

Автор: MAKCim 9.5.2007, 12:49
Цитата(Goganchic @  8.5.2007,  16:56 Найти цитируемый пост)
как показывает практика в 99% случаев это код без goto

 smile 
и много у вас было практики?  smile 

Автор: JackYF 10.5.2007, 17:50
Цитата(Жуть @  9.5.2007,  12:03 Найти цитируемый пост)
для 0.00001%


А ты столько кода столько 100 / (0.000001 ) == 10^8 == 100 метров написал вообще за свою жизнь?

Автор: Hurricane 10.5.2007, 18:03
Цитата(JackYF @ 10.5.2007,  09:50)
Цитата(Жуть @  9.5.2007,  12:03 Найти цитируемый пост)
для 0.00001%


А ты столько кода столько 100 / (0.000001 ) == 10^8 == 100 метров написал вообще за свою жизнь?

Ну налетели, коршуны...  smile Пусть и мой код добавит туда, там, где я goto не пользуюсь, мне не жалко. Может и еще кто-нибудь кодом поделится. С миру по нитке...  smile 

Автор: Goganchic 10.5.2007, 18:58
MAKCim, опыта у меня достаточно, да к тому же пока что ни один заказчик не жаловался на написанный мной код: ни на скорость его работы, ни на расширяемость.

Автор: MAKCim 10.5.2007, 20:40
Goganchic
верю, не обижайся  smile 

Автор: Anikmar 10.5.2007, 21:09
Цитата(JackYF @  10.5.2007,  17:50 Найти цитируемый пост)
А ты столько кода столько 100 / (0.000001 ) == 10^8 == 100 метров написал вообще за свою жизнь?

 smile 

А можно узнать, откуда единица измерения появилась? Был процент случаев употребления и сразу преобразовался в метры кода   smile
 smile  


Автор: v_nikolaev 11.5.2007, 12:06
Цитата(HexoGenus @ 18.11.2002,  18:43)
- ухудшает условия для работы оптимизирующих компиляторов (а следовательно при большом количестве гото программа в большинстве вариантов будет работать медленнее чем та же программа построенная при помощи конструкций языков высокого уровня)

не знаю, может уже кто-то написал.

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

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

ну ещё есть и определённые правила хорошего тона. 
как однажды аргументировали на разборе задач на олимпиаде:
- перебором пользоваться неудобно.
- в каком смысле.
- в том же смысле, как нехорошо использовать оператор goto smile

Автор: JackYF 11.5.2007, 15:27
Цитата(Anikmar @  10.5.2007,  21:09 Найти цитируемый пост)
Был процент случаев употребления


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

Автор: Goganchic 11.5.2007, 21:57
Anikmar,  лучше так считать: минимальная конструкция с goto будет иметь вид 
Код

goto a;

Т.е. содержать 7 символов + 2 символа - сама метка + двоеточие итого 9 символов. А вот теперь 9 используй вместо 100.
А вообще, кто сказал, что что  он уже больше не будет писать код в своей жизни? Может пока что идут те 99.999... а гоуту будет потом smile

Автор: Anikmar 11.5.2007, 22:35
 smile 
Цитата(Goganchic @  11.5.2007,  21:57 Найти цитируемый пост)
А вообще, кто сказал, что что  он уже больше не будет писать код в своей жизни? Может пока что идут те 99.999... а гоуту будет потом 

Нет, вы просто не попали в тот процент программистов, которые не заморачиваются и используют любые конструкции языка если им это удобнее  smile 
Вопрос не в количестве кода, а в качестве  smile 
Цитата(JackYF @  11.5.2007,  15:27 Найти цитируемый пост)
Ну не будешь же ты говорить, что случаев употребления может быть меньше, чем байтов в исходниках? 

Фильм "Москва слезам не верит" - Переведи... И-и-ик...  smile 

Автор: JackYF 12.5.2007, 00:44
Цитата(Anikmar @  11.5.2007,  22:35 Найти цитируемый пост)
Фильм "Москва слезам не верит" - Переведи... И-и-ик...  smile  

Не понял...

Автор: Anikmar 12.5.2007, 01:54
Цитата(JackYF @  12.5.2007,  00:44 Найти цитируемый пост)
Цитата(Anikmar @  11.5.2007,  22:35 )
Фильм "Москва слезам не верит" - Переведи... И-и-ик...  smile  


Не понял...

Да это так, в этом фильме момент есть прикольный. По поводу социального статуса и т.п. Просто я не понял вашей фразы: 
Цитата(JackYF @  11.5.2007,  15:27 Найти цитируемый пост)
Ну не будешь же ты говорить, что случаев употребления может быть меньше, чем байтов в исходниках? 


И вобще - я уже просто нагло офтоплю, мне стыдно...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)