На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (12) « Первая ... 3 4 [5] 6 7 ...  11 12 все  ( Перейти к последнему сообщению )  
> #define ИЛИ template? , C++
   
#define ИЛИ template
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Цитата OpenGL @
    И зачем разбивать? Функция с "первым же встретившится goto" предельно понятна.

    Тебя может и не напрягают функции по тыще строчек, а меня напрягают.

    Цитата OpenGL @
    Начал переписывать, не поняв, какую проблему решает goto, очевидно :D

    И какую проблему он там решает, какую не решает мой пример?

    Цитата OpenGL @
    Да ладно. Ну вот тебе ещё примеры из ядра линукса, git, quake 3. Дальше искать влом.

    Ну я выше пример реализации raii и исключений привел на С, я там не нашел goto. И?

    Цитата OpenGL @
    Но, ты, конечно, можешь считать, что авторы всех этих программ - дебилы и говнокодеры, не догадавшиеся, что можно было просто обратиться к KILLER-у с исходников с вопросом "как переписать без goto" - я спорить с этим даже не буду :D

    Даже K&R пишут что всегда можно обойтись без goto, и даже они считают что многие этим goto злоупотребляют. Т.е. по сути они согласны с моей точкой зрения. Но ведь они такие же дебилы видимо как и я? Все тру папки юзают goto ведь.

    Цитата OpenGL @
    О чём ты? Ты вполне себе ограничен - религиозной заморочкой "писать код без goto", которая, очевидно, мешает в определённых случаях писать более компакнтный и читаемый код :D

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

    Цитата OpenGL @
    Перепиши. Вот зуб даю - если у тебя получится не хуже, чем с goto, то тебе тут не только я - половина участников темы плюсы поставит. От себя вообще три плюса обещаю :D

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

    Цитата OpenGL @
    И что? Или ты не заметил, что тут решается задача "запрыгнуть внутрь циклов", и это не goto cleanup, смысла котоого в плюсах немного? :D

    Конечно заметил. Я к тому, что это не кастрированный Си, где нет средств для реализации с помощью других технологий.
      Цитата D_KEY @
      даже если вы пишите на C, рассмотрите варианты с __finally для ms-компилятора и __attribute__ ((__cleanup__(f))) для gcc/clang.
      Нестандартное расширение языка. Такие штуки допустимы в библиотеке компилятора, но крайне нежелательны в пользовательском коде. Мир С-компиляторов упомянутыми тремя компиляторами не ограничивается.
      Сообщение отредактировано: amk -
        Цитата amk @
        Неприемлемо. Ты переписал пример на другом языке.

        Майкрософт тоже писало ATL/MFC на другом языке. У них это приемлемо использовать goto в методе класса, а мне не приемлемо, странно как то :-?
          Они могут многое себе позволить, хотя бы потому, что свою операционную систему собирают собственным компилятором. А вот ты пишешь программы для вообще говоря не совсем известного компилятора. Конечно, если ты ограничиваешься программированием для себя, ты можешь пользоваться любыми средствами.
            Цитата amk @
            Они могут многое себе позволить, хотя бы потому, что свою операционную систему собирают собственным компилятором.

            То есть это сразу переводит уровень их кода из говнокода в код с хорошим стилем программирования? Странно :scratch:

            Цитата amk @
            А вот ты пишешь программы для вообще говоря не совсем известного компилятора. Конечно, если ты ограничиваешься программированием для себя, ты можешь пользоваться любыми средствами.

            Для С++ сного вроде как. :-?
              Цитата amk @
              Нестандартное расширение языка. Такие штуки допустимы в библиотеке компилятора, но крайне нежелательны в пользовательском коде.

              Очень много софта пишется под одну инфраструктуру.
              В том же ядре линукса полно gcc-специфики. И это нормально. В nginx специфичные вещи обернуты. Можно пойти по такому пути.

              Цитата
              Мир С-компиляторов упомянутыми тремя компиляторами не ограничивается.

              Нужно больше конкретики.

              Кроме того, не забывай, что это лишь один из вариантов, что я предложил ;)
                Цитата KILLER @
                Тебя может и не напрягают функции по тыще строчек, а меня напрягают.

                Откуда "тыще"? Функция, о которой идёт речь, всего-то 150 строк занимает, включая комментарии, пустые строки и фигурные скобки, да и к тому же она простая как палка. Переписывание её на паттерн do..while просто зря добавит дополнительный нафиг не нужный отступ практически во всё тело функции.

                Цитата KILLER @
                И какую проблему он там решает, какую не решает мой пример?

                Переход из цикла к cleanup, очевидно :D

                Цитата KILLER @
                Ну я выше пример реализации raii и исключений привел на С, я там не нашел goto. И?

                А что "и"? Очевидно, что есть случаи, когда с goto читаемей и удобнее, а есть, когда и без него удобно всё делается. Твой пример, очевидно, из второй группы. Что ты им сказать хотел? :D

                Цитата KILLER @
                Даже K&R пишут что всегда можно обойтись без goto, и даже они считают что многие этим goto злоупотребляют. Т.е. по сути они согласны с моей точкой зрения.

                :lool:
                Киля, прикинь, у меня тоже есть эта книга. Вот цитата оттуда:
                Цитата
                В языке "C" предусмотрен и оператор GOTO, которым бесконечно злоупотребляют, и метки для ветвления. С формальной точки зрения оператор GOTO никогда не является необходимым, и на практике почти всегда можно обойтись без него. Мы не использовали GOTO в этой книге.
                Тем не менее, мы укажем несколько ситуаций, где оператор GOTO может найти свое место.

                Внимание, вопрос - ты утверждаешь, что приведённая цитата и твой опус
                Цитата KILLER @
                именно что самое по себе использование goto - зло.

                эквивалентны? :crazy: А с тем, что всегда можно обойтись без goto, или что без него многие задачи могут быть решены ничуть не сложнее, никто и не спорит, поэтому зачем ты это усиленно пытаешься доказать - непонятно :D

                Цитата KILLER @
                Ну собственно как и ты. Ты ведь раньше писал что тоже не используешь goto. А да, один раз на каком то делфи заюзал.

                Хм. :scratch: А можно я этот пост в рамочку и на стену отправлю - он доказывает, что ты изредка хоть что-то читать умеешь :D

                Цитата KILLER @
                Не мешает тебе это ограничение? Выходит мы с тобой оба ограничены?

                А, нет, облом, ты не читатель :no-sad: Ну либо читатель, но не пониматель :no-sad: В чём заключается моё ограничение, если код с goto я написать могу, а ты - нет? :D

                Цитата KILLER @
                Вы морозитесь, ну синтетические примеры с кучей ограничений разве что приводите.

                До-до-до, назови любой пример использования - синтетическим с кучей ограничений и дело в шляпе :jokingly:

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

                А, так ты не пишешь ничего сложнее helloworld-ов, раз не в состоянии представить, что задача в стиле "тройной цикл, есть возможность прервать в любом месте, и старт в случае прерывания - с того места, где произошла остановка" - вполне конкретная. Можно было это сказать сразу - тогда бы и срача на n страниц не было :D
                И кстати, мне недавно как раз такую задачу и надо было решать - вычислить с указанными выше условиями значения некой функции f(x, y, z) для всех возможных входных параметров. Правда, писалось на языке без goto, так что пришлось городить огород с вычислением всех индексов руками. Писал бы на С/С++ - сделал бы goto и не парился. Это считается, что я юзал goto на практике? :D

                Цитата KILLER @
                Конечно заметил. Я к тому, что это не кастрированный Си, где нет средств для реализации с помощью других технологий.

                Ога, и что характерно, на просьбу продемонстрировать решение задачи с их помощью ты сливаешься простым "ограничения несостоятельны" :lool:
                Сообщение отредактировано: OpenGL -
                  Я вот не помню случая, когда я бы использовал goto в проде.
                  Но конкретно в той задаче goto выглядит неплохо. Хотя в прод, думаю, что в любой команде, такое бы не заапрувили и пришли к какому-то другому варианту.
                    Цитата D_KEY @
                    Я вот не помню случая, когда я бы использовал goto в проде.
                    Я тоже не помню. Но то, что пользовал, помню. :wacko: Как-то вот так вот. :-?
                      Цитата OpenGL @
                      Переход из цикла к cleanup, очевидно :D

                      Странно, а у меня его разве нету? :-? Вообще то у него не к клинапу переход, а переход за циклы, очистка памяти и выход из функции. В моем примере ровно то же самое. :-?

                      Цитата OpenGL @
                      Откуда "тыще"? Функция, о которой идёт речь, всего-то 150 строк занимает, включая комментарии, пустые строки и фигурные скобки, да и к тому же она простая как палка. Переписывание её на паттерн do..while просто зря добавит дополнительный нафиг не нужный отступ практически во всё тело функции.

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

                      Цитата OpenGL @
                      А что "и"? Очевидно, что есть случаи, когда с goto читаемей и удобнее, а есть, когда и без него удобно всё делается. Твой пример, очевидно, из второй группы. Что ты им сказать хотел? :D

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

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

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

                      Цитата OpenGL @
                      Киля, прикинь, у меня тоже есть эта книга. Вот цитата оттуда:

                      Ключевое слово там - может. А может и не найти. Часто ты прыгаешь из 4-ого по вложенности цикла(да даже из второго) в конец функции? Думаю что никогда, раз не юзаешь goto. И чего дальше? Почему ты не применяешь сам goto, но при этом за него топишь? Потому что рассматриваешь проблему с академической стороны, философствуешь. И хрен ты этот goto будешь использовать, останешься при своем. И ну что мне прикидывать?

                      Цитата OpenGL @
                      эквивалентны?

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

                      Цитата OpenGL @
                      А с тем, что всегда можно обойтись без goto, или что без него многие задачи могут быть решены ничуть не сложнее, никто и не спорит, поэтому зачем ты это усиленно пытаешься доказать - непонятно :D

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

                      Цитата OpenGL @
                      Хм. :scratch: А можно я этот пост в рамочку и на стену отправлю - он доказывает, что ты изредка хоть что-то читать умеешь :D

                      Я посты все читаю всегда, внимательно. В отличии от вас. Я это уже говорил 100 раз. Где там я что забыл или не прочитал?

                      Цитата OpenGL @
                      А, нет, облом, ты не читатель :no-sad: Ну либо читатель, но не пониматель :no-sad: В чём заключается моё ограничение, если код с goto я написать могу, а ты - нет? :D

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

                      Цитата OpenGL @
                      До-до-до, назови любой пример использования - синтетическим с кучей ограничений и дело в шляпе :jokingly:

                      А тут были какие то не синтетические примеры? Где? Покажи?

                      Цитата OpenGL @
                      А, так ты не пишешь ничего сложнее helloworld-ов, раз не в состоянии представить, что задача в стиле "тройной цикл, есть возможность прервать в любом месте, и старт в случае прерывания - с того места, где произошла остановка" - вполне конкретная. Можно было это сказать сразу - тогда бы и срача на n страниц не было :D

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

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

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

                      Цитата OpenGL @
                      И кстати, мне недавно как раз такую задачу и надо было решать - вычислить с указанными выше условиями значения некой функции f(x, y, z) для всех возможных входных параметров. Правда, писалось на языке без goto, так что пришлось городить огород с вычислением всех индексов руками. Писал бы на С/С++ - сделал бы goto и не парился. Это считается, что я юзал goto на практике? :D

                      Пфф, я же говорю "на словах я Лев Толстой, а на деле хрен простой". Вот когда будешь писать goto, тогда можешь бить себя пяткой в грудь и кричать что я применяю на практике goto.
                      Я тоже могу много чего написать.

                      Цитата OpenGL @
                      Ога, и что характерно, на просьбу продемонстрировать решение задачи с их помощью ты сливаешься простым "ограничения несостоятельны" :lool:

                      В каком смысле? Ты про пример Qraizer? Ну давай я подумаю на досуге, перепишу его и тебе покажу.
                        OpenGL, держи переписанный Qraizer'а код без goto. Я один раз проверил, особо не гонял. Если все гуд - жду от пол форума плюсов, плюс лично от тебя три штуки:
                        ExpandedWrap disabled
                          #include <windows.h>
                          #include <io.h>
                          #include <conio.h>
                          #include <fstream>
                          #include <iostream>
                           
                          int main()
                          {
                              int i(0), j(0), k(0), l(0);
                           
                              std::ofstream log;
                              log.open("file.log", std::ofstream::out | std::ofstream::trunc);
                              std::clog.rdbuf(log.rdbuf());
                           
                              bool          mega_ok = true;
                              if (_access("savedstate.dat", 4) == 0)     // Проверить, нет ли сохранённого состояния от предыдущего запуска
                              {                                             // Если есть, восстановить и продолжиться
                                  std::ifstream inFile("savedstate.dat");
                                  
                           
                                  mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount() == sizeof(i);
                                  mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount() == sizeof(j);
                                  mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount() == sizeof(k);
                                  mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&l), sizeof(l)).gcount() == sizeof(l);
                                  if (mega_ok && (inFile.good() || inFile.eof()))
                                  {
                                      std::cout << "The saved state is successfully restored." << std::endl;
                                      //goto resume;
                                  }
                                  else return std::cerr << "The saved state restoring error. State file is wrong." << std::endl,
                                      1;
                              }
                           
                              for ( !mega_ok ? i = 0 : i=i; i<10; ++i)
                              {
                                  for (!mega_ok ? j = 0: j = i; j<10; ++j)
                                  {
                                      for (!mega_ok ? k = 0:k = j; k<10; ++k)
                                      {
                                          for (!mega_ok ? l = 0:l = k; l<10; ++l)
                                          {
                                          //resume:
                                              if (kbhit() && getch() == '\x1B')     // Проверить, не просят ли нас ESCпом прерваться
                                              {                                     // Если да, сохранить состояние и выйти
                                                  if (_access("savedstate.dat", 2) == 0) remove("savedstate.dat"); //! <<<<<< Закоментируй чтобы начать с определенного состояния
                           
                                                  std::ofstream outFile("savedstate.dat");
                                                  bool ok = true;
                           
                                                  ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good();
                                                  ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good();
                                                  ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good();
                                                  ok = ok && outFile.write(reinterpret_cast<char*>(&l), sizeof(l)).good();
                                                  if (!(ok && (outFile.good() || outFile.eof())))
                                                      return std::cerr << "The state saving error." << std::endl,
                                                      1;
                                                  return std::cout << "The state successfully saved." << std::endl,
                                                      2;
                                              }
                           
                                              /* ... */
                           
                                              std::clog << "i = " << i << ", j = " << j << ", k = " << k << ", l = " << l << std::endl;
                                              Sleep(1);
                                          }
                                      }
                                  }
                              }
                              std::cout << "Done... Pres any key...";
                              std::cin.get();
                              if (_access("savedstate.dat", 2) == 0) remove("savedstate.dat"); //! <<<<<< Закоментируй чтобы начать с определенного состояния
                           
                              
                              std::clog.clear();
                              log.close();
                              return 0;
                          }

                        Плюс код инициализирующий начальным состоянием файл savedstate.dat
                        ExpandedWrap disabled
                              //! СОхраняем состояние всех счетчиков начиная с 3
                              {
                                  int i(3), j(3), k(3), l(3);
                                  std::ofstream outFile("savedstate.dat");
                                  bool ok = true;
                           
                                  ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good();
                                  ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good();
                                  ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good();
                                  ok = ok && outFile.write(reinterpret_cast<char*>(&l), sizeof(l)).good();
                           
                              }

                        Плюс, мержиловка онлайн тебе в помощь:
                        https://www.diffchecker.com
                        Сообщение отредактировано: KILLER -
                          Цитата KILLER @
                          Странно, а у меня его разве нету?

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

                          Цитата KILLER @
                          Функция в 150 строк кода - тоже большая. И файл в 5 тыс строк большой. Попробуй проанализировать этот код глазами от начала до конца, не перематывая в конец. Не сможешь, либо тебе придется держать в уме с какого места ты прыгаешь. Потому что метку, которая находится в конце функции, и на которую прыгают в начале функции - глазами найти ты не сможешь. Тебе придется постоянно перематывать эту функцию туда обратно, чтоб понять логику. А без goto, ты сможешь прочитать не прыгая взад вперед по этой функции глазами.

                          Я - не неосилятор, как некоторые, и сразу понял, что делает обсуждаемая функция, равно как и понял логику её работы. Знал бы спецификацию http или семантику полей, в которые она пишет - понял бы полностью, вплоть до возможности не напрягаясь внести в неё изменения. ЧЯДНТ? :D

                          Цитата KILLER @
                          Почему ты когда писал на Си не использовал такой мощный и очевидный инструмент как goto ? Может ты в Си с указателями не работал и память не выделял? Если не работал и не выделял память, значит ты на Си не писал. А если выделял - как же ты очищал ее без goto ?

                          Потому что было не нужно :D На си я писал только пару олимпиадных задачек ради фана. Указатели там обычно используются так, как тебе даже в страшном сне не может присниться. А очищать память в этом случае просто нафиг не нужно - даже если её приходится выделять в куче, то проще забить на освобождение, ибо программа всё равно дольше пары секунд не проработает :crazy:

                          Цитата KILLER @
                          Ключевое слово там - может. А может и не найти.

                          Капитан, перелогинься :lool: Кто тут с этим спорит вообще? Ну да, может и не найти, и в этом случае лучше написать без goto. Но ведь может и найти - что тогда? :D

                          Цитата KILLER @
                          Часто ты прыгаешь из 4-ого по вложенности цикла(да даже из второго) в конец функции? Думаю что никогда, раз не юзаешь goto.

                          :lool:
                          Ты сам посчитаешь, сколько раз я говорил, что я не пишу на Си, поэтому самое частое применение goto - прыжок к очистке - мне не нужен, или это сделать мне? :D

                          Цитата KILLER @
                          Потому что еще раз. Когда ты пишешь программу, которая состоит максимум из 100 строк - да пиши там хоть вообще без циклов на одних goto. С этим еще наверное можно как то разобраться. Но когда у тебя большой проект, и везде понапиханы goto - это говорит лишь об одном, ты плохо спроектировал свою систему, раз юзаешь goto для очистки памяти. И сопровождать такой код - тебе будет труднее.

                          Внимание, вопрос - кто тут говорит, что надо писать программу, везде пихая goto? :D

                          Цитата KILLER @
                          Я посты все читаю всегда, внимательно. В отличии от вас. Я это уже говорил 100 раз. Где там я что забыл или не прочитал?

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

                          Цитата KILLER @
                          Еще с прошлой работы осталась привычка, что если вложенность цикла больше двух - значит код плохой, нужно бить на функции.

                          Вау. А венгерский алгоритм, алгоритм Флойда или вышеописанная мной задача, где я "использовал" goto - перебор всех аргументов в функции f(x, y, z) ты тоже будешь разбивать на функции? :crazy:

                          Цитата KILLER @
                          Твое ограничение заключается в том, что на словах ты Лев Толстой, а на деле, ну ты понял? Ты говоришь что можешь, но никогда не используешь.

                          А что такого? Я считаю, что юзать goto там, где он к месту - нормально. Можно даже усилить - юзать %something% там, где оно к месту - нормально. Ну а почему я сам это не делаю - на это может быть тысяча причин. Или ты делаешь всё, что считаешь нормальным? :crazy:

                          Цитата KILLER @
                          Потому что я тоже могу написать код с goto. И раньше я об этом писал. Один сел на жепу, когда я ему сказал что его пример не в тему. Хочешь тебя посажу, одной своей цитатой? Или ты сам найдешь?

                          Я в курсе, что ты это говорил, но поскольку ты старательно пытаешься доказать, что goto, когда оно в тему, на самом деле всё ухудшает - я просто записал эту твою фразу в обычное балабольство :D
                            OpenGL, и там посмотри, я забыл переменные инициализировать, я поправил. Хрен его знает - вроде делает вид что работает, но я толком не тестил.
                              Цитата KILLER @
                              OpenGL, держи переписанный Qraizer'а код без goto.

                              Фиаско. У тебя, если ты дошёл до цикла, mega_ok всегда равно true. Как следствие, инициализация счётчиков цикла у тебя всегда будет идти по ветке false, т.е. ровно так, как в исходном цикле, если бы мы зашли в него как обычно. Иными словами - вне зависимости от того, что ты восстановил, ты пойдёшь крутиться в циклах с самого начала :)
                                Цитата OpenGL @
                                У тебя, если ты дошёл до цикла, mega_ok всегда равно true

                                С чего вдруг?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (12) « Первая ... 3 4 [5] 6 7 ...  11 12 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0741 ]   [ 18 queries used ]   [ Generated: 25.04.24, 00:28 GMT ]