На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (32) « Первая ... 4 5 [6] 7 8 ...  31 32  ( Перейти к последнему сообщению )  
> goto vs break & continue , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
    Цитата applegame @
    Откровенная ложь с честными глазами.
    Ну давай посмотрим. Надеюсь ты статью читал? Если не читал, рассказываю в двух словах: сначала автор брешет про комбинационные схемы. Потом выдал пару слов про RS триггеры, где ляпнул абсолютно не имеющую смысла хрень. Потом начался какой то детский лепет про ассемблер, где автор опять же успел наврать аж два раза. Потом рассмотрение каких то рафинированных примеров, и попытка анализа их с точки зрения производительности там и расхода памяти, где автор уже начинает брехать аки сивый конь. Что то там про лишние операции сравнения и ассемблерные листинги, экономию тактов, совершенно не зная даже о чём говорит. Плять кому нужно экономить десяток другой тактов, если это спровоцирует внеочередной сброс и перезагрузку кэша? Рассуждения на тему исключений С++ вообще за гранью добра и бобра. Автор слабо разбирается во всех сферах, к которым пытается аппелировать и С++ знает посредственно.

    В этом, конечно, весь хабр, но зачем сюда то всякую гадость тянуть?
      Цитата Повстанець @
      В этом, конечно, весь хабр

      :yes-sad:
        Цитата Повстанець @
        В этом, конечно, весь хабр, но зачем сюда то всякую гадость тянуть?
        Комментов ради. Статью читал и комментарии тоже. Все авторы брешут в той или иной степени, сознательно или по ошибке, по всякому. Аргументировать надо по существу, а не "ты - ...".
        Сообщение отредактировано: applegame -
          Цитата applegame @
          Цитата Повстанець @
          В этом, конечно, весь хабр, но зачем сюда то всякую гадость тянуть?
          Комментов ради.

          А мы то, наивные, надеялись, что для подкрепления вашей позиции...
          Впрочем, я догадывался.
            Цитата MyNameIsIgor @
            А мы то, наивные, надеялись, что для подкрепления вашей позиции...
            Впрочем, я догадывался.
            Сначало надо научится внимательно читать. Статья была приведена для примера варианта кода, в котором goto оправдан.
              Цитата applegame @
              Статья была приведена для примера варианта кода, в котором goto оправдан.

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

                Добавлено
                Цитата MyNameIsIgor @
                Так наглядно же в стихах и песнях объяснили, что нифига он не оправдан в этих примерах...
                Точно также там есть объяснения, что оправдан. Но вы как обычно видите только то, что хотите видеть.
                  Цитата applegame @
                  у меня

                  Цитата applegame @
                  точка зрения

                  Взаимоисключающие параграфы. Вы характеризуетесь тем, что где-то что-то почитали, посмотрели на автора, признали его за "авторитета" и страшно удивляетесь, когда другие данного персонажа в мужской половой орган не ставят.
                  Вы можете только повторять чьё-то мнение, но своё, да ещё и с обоснование - не, в вашем случае это фантастика.
                    Цитата MyNameIsIgor @
                    Взаимоисключающие параграфы. Вы характеризуетесь тем, что где-то что-то почитали, посмотрели на автора, признали его за "авторитета" и страшно удивляетесь, когда другие данного персонажа в мужской половой орган не ставят.
                    Вы можете только повторять чьё-то мнение, но своё, да ещё и с обоснование - не, в вашем случае это фантастика.
                    Фантастика - это увидеть пост от MyNameIsIgor без оскорблений. Если у вас такая низкая оценка моих способностей, то просто не дискутируйте со мной.
                      Цитата applegame @
                      Фантастика - это увидеть пост от MyNameIsIgor без оскорблений.

                      Что, правда вызывает батхёрт? Ну, ничего - поболит и пройдёт :D
                      Цитата applegame @
                      Если у вас такая низкая оценка моих способностей, то просто не дискутируйте со мной.

                      Так я и не дискутирую, а всего лишь высказываю своё отношение к происходящему в теме.
                        Цитата MyNameIsIgor @
                        Ну, ничего - поболит и пройдёт :D
                        Спасибо, что поделились своим бесценным опытом. :D
                        Цитата MyNameIsIgor @
                        Так я и не дискутирую, а всего лишь высказываю своё отношение к происходящему в теме. :trollface:
                        fixed
                        Сообщение отредактировано: applegame -
                          Вы, видимо, забыли об этой теме. Ключевые моменты:
                          Цитата Qraizer @
                          Ха. Вы, похоже, никогда не использовали goto по-настоящему:
                          Слабонервным от структурности не смотреть.
                          ExpandedWrap disabled
                            #include <windows.h>
                            #include <io.h>
                            #include <conio.h>
                            #include <fstream>
                            #include <iostream>
                             
                            int main()
                            {
                              int i, j, k, l;
                             
                              if (_access("savedstate.dat", 4) == 0)     // Проверить, нет ли сохранённого состояния от предыдущего запуска
                              {                                             // Если есть, восстановить и продолжиться
                                std::ifstream inFile("savedstate.dat");
                                bool          ok = true;
                             
                                ok = ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount() == sizeof(i);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount() == sizeof(j);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount() == sizeof(k);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&l), sizeof(l)).gcount() == sizeof(l);
                                if (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 (i=0; i<10; ++i)
                              {
                                for (j=i; j<10; ++j)
                                {
                                  for (k=j; k<10; ++k)
                                  {
                                    for (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::cout << "i = " << i << ", j = " << j << ", k = " << k << ", l = " << l << std::endl;
                                      Sleep(1);
                                    }
                                  }
                                }
                              }
                              
                              if (_access("savedstate.dat", 2) == 0) remove("savedstate.dat");
                              return 0;
                            }
                          Цитата Dark_Sup @
                          Убойно. Переходить по goto в середину вложенных циклов... таких номеров я даже в цирке не видел.
                          Цитата Qraizer @
                          Это была какая-то DOS программка с очччень длительным временем работы. В связи с чем сохранение/восстановление было не лишним. Чем занималась, уже не помню, но как-то для похожей дискуссии на Реалкодинге набросал по памяти основную идею.
                          Цитата Qraizer @
                          Для сравнения, кто возьмётся переписать мой пример без goto?
                          Цитата ЫукпШ @
                          Так ?
                          ...
                          Цитата Qraizer @
                          ... Параметры циклов меняются внутри их тел; в код добавилось 220 (update: уже больше, в оригинале было три цикла) сравнений; производительность упала... Нет, без потери производительности и при этом структурно - можно, но читабельность будет (ещё) ниже плинтуса.
                          Цитата Qraizer @
                          Как-то так, вроде.
                          Ещё много строчек.
                          ExpandedWrap disabled
                            #include <windows.h>
                            #include <io.h>
                            #include <conio.h>
                            #include <fstream>
                            #include <iostream>
                             
                            int main()
                            {
                              int i, j, k, l;
                              int i0 = 0,
                                  j0 =i0,
                                  k0 =j0,
                                  l0 =k0;
                             
                              if (_access("savedstate.dat", 4) == 0)        // Проверить, нет ли сохранённого состояния от предыдущего запуска
                              {                                             // Если есть, восстановить и продолжиться
                                std::ifstream inFile("savedstate.dat");
                                bool          ok = true;
                             
                                ok = ok && inFile.read(reinterpret_cast<char*>(&i0), sizeof(i0)).gcount() == sizeof(i0);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&j0), sizeof(j0)).gcount() == sizeof(j0);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&k0), sizeof(k0)).gcount() == sizeof(k0);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&l0), sizeof(l0)).gcount() == sizeof(l0);
                                if (ok && (inFile.good() || inFile.eof()))
                                  std::cout << "The saved state is successfully restored." << std::endl;
                                else return std::cerr << "The saved state restoring error. State file is wrong." << std::endl,
                                            1;
                              }
                             
                              for (i=i0; i<10;)
                              {
                                for (j=j0; j<10;)
                                {
                                  for (k=k0; k<10;)
                                  {
                                    for (l=l0; l<10; ++l)
                                    {
                                      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::cout << "i = " << i << ", j = " << j << ", k = " << k << ", l = " << l << std::endl;
                                      Sleep(1);
                                    }
                                    l0 = ++k;
                                  }
                                  l0 = k0 = ++j;
                                }
                                l0 = k0 = j0 = ++i;
                              }
                             
                              if (_access("savedstate.dat", 2)==0) remove("savedstate.dat");
                              return 0;
                            }
                          Не то, чтобы вообще без потерь, но плохонького оптимизатора будет достаточно. Помню, что тогда я так и не допёр до этого решения. Минут через 20, включающие три попытки отладиться, плюнул и написал в лоб, т.е. с goto. Потратил 10 секунд и ни капли отладки. Сейчас вот пошло с третьего раза и заняло 10 минут.
                            О, а я все ждал, когда Qraizer выложит свой код с goto :) Уже видел его на другом форуме.
                            Я кстати вспомнил, где использовал goto для выхода из функции. В дельфи, где отсутствуют нормальные деструкторы :)
                              Цитата OpenGL @
                              В дельфи, где отсутствуют нормальные деструкторы :)

                              Там же присутствует "нормальный" finally
                                Цитата D_KEY @
                                Там же присутствует "нормальный" finally

                                Во-первых, решение с goto в данном случае мне кажется более логичным, во-вторых, тогда я не знал, что при выпрыгивании он тоже выполнится :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 4 5 [6] 7 8 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0548 ]   [ 15 queries used ]   [ Generated: 7.05.24, 06:17 GMT ]