Кресты / Говнокод #20047 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
bool  Object::DeleteDouble(void* data)
    {
        Element* rc = Head;
        BANKCLIENT* asd = (BANKCLIENT*)rc->Data;
        int dbl;
        Element* rc1 = Head;
        BANKCLIENT* asd1 = (BANKCLIENT*)rc1->Data;
        while ((rc != NULL) && (rc->Data != data))
        {
            asd = (BANKCLIENT*)rc->Data;
            dbl = asd->NumScore;
            while ((rc1 != NULL) && (rc1->Data != data))
            {
                asd1 = (BANKCLIENT*)rc1->Data;
                if (dbl == asd1->NumScore)
                {
                    std::cout << "Дублирующийся элемент удалён" << std::endl;
                    Delete(rc1);
                    goto flag;
                }
            }
        }
    flag:
        system("pause");
        return rc;
    }

Некая svetlana.kotik раскрывает секреты односвязных списков.

Запостил: Fluttie Fluttie, (Updated )

Комментарии (71) RSS

  • котик на первом курсе учица?

    >> system("pause");
    :))))))
    Ответить
    • "в моих крестах"...
      Может тебе free(nullptr) на могиле выгравировать?
      Ответить
      • > free(nullptr)
        Я вот что-то не врубаюсь, нахуя зачем это оставили в крестах?
        Или, более глобально, нафига делать кресты обратно совместимыми с сишечкой?
        Как-бы если нужен пирфоманс и байтоёбство - идём насишечку, благо её стандарт тоже развивается (C11), а если нужен высокий уровень, ООП, все дела - нахуя ебать байты malloc'ами?
        А уж компилировать проекты на С конпелятором С++ - это явное извращение.
        Ответить
        • > обратно совместимыми с сишечкой
          Потому что изначально кресты паразитировали на сишке. А потом уже столько гибридного c/c++ софта понаписали, что совместимость пришлось оставить навсегда.

          Это ж тебе не питон, чтобы всего за 10 лет почти перейти на новую, расово чистую версию.
          Ответить
        • Есть мнение, что совместимость с сишечкой - это главная причина успеха плюсов. Почитай дизайн и эволюцию крестов Страуструпа, если интересно.

          > Как-бы если нужен пирфоманс и байтоёбство - идём насишечку
          У меня всегда бомбит от этого тезиса. Насишечку идут, когда нужны сегфолты и буфероверфлоу. А перфоманс и байтоебство можно и в плюсах, не отказывая себе в прелестях RAII, ооп и прочих абстракций.
          Ответить
          • У тебя бомбит видимо от того, что ты не осилил писать на сишечке без сегфолтов и оверфлоу.
            А другие осилили. Например написавшие ту ОС, под управлением которой ты сейчас пишешь эту чушь
            Ответить
            • Я и не пытался осиливать. Еще скажи, что у меня бомбит, потому что я говно на завтрак не ем.
              Ответить
              • Ну вот в том и дело, что даже не пытался. Потому и несешь ламерскую хуйню про сегфолты, которую вычитал на каком нибудь глупом форуме
                Ответить
                • Таки непонятно обвинение. Хочешь сказать, что в плюсах нельзя в пирфоманс? Или хочешь сказать, что в си есть приличные средства абстракции (кроме макросов, лел)? Или что си хоть как-то защищает программиста от выстрела в ногу?
                  Эко у тебя бомбануло от посягательства на свитую сишечку, что ты аж диагнозы мне начал ставить.
                  Ответить
                  • В сях есть вполне годные средства абстракций вроде непрозрачных типов. Бомбануло меня от того, что глупый неосилятор имеет наглость судить о том, в чем не разобрался. Ты песдиш что в сях всегда есть оверфлоу. Но это не так. Достаточно просто думать головой
                    Ответить
                    • Отсоси маня, я про синьер дивелопер и хуй у меня длинее.
                      Ответить
                      • отсосите оба, я тимлид, а сишка говно, кресты говно, эрланг говно, все остальные языки говно, весь код говно, вся цивилизация говно, а человек несовершенен, но, к счастью, смертен
                        Ответить
                    • Вот как раз очень мощную абстракцию запостили: http://www.govnokod.ru/20059
                      Абстрактная функция close может закрыть все что угодно, даже argc и errno.
                      Ответить
            • Субъективная питушня.

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

              У тебя бомбит видимо от того, что ты не осилил писать на жавоскрипте без андефайндов и падающих при ошибке http-запросов.
              А другие осилили. Например написавшие тот сайт, под управлением которого ты сейчас пишешь эту чушь
              Ответить
              • Не существует способа написать хороший код на джс. А на сях существует, хотя и сложный. На сях можно эмулировать модули, а на джс нет
                Ответить
                • > А на сях существует, хотя и сложный.
                  Да нет там ничего сложного. Там просто нужны самоконтроль и сила воли, прокачанные до 99 уровня. Или ревьювер с кнутом. Иначе рано или поздно срываешься в хаки и преждевременную оптимизацию ;(

                  З.Ы. Поэтому я больше люблю кресты с их няшными RAII и шаблонами. Рутины поменьше.
                  Ответить
                • Субъективнопитушизм. Симметричное тоже верно.

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

                    п.с. я даже сам не знаю, серьезно я или стоило выделить зеленым.
                    Ответить
                • Есть такой забавный зверёк - Intel Galileo. Идейно - ардуино-совместимая плата от интела. Реально - одноплатник на аналоге P-II c линуксом на борту. Так вот, ардуинообразное поведение по USB там реализуется Node.js демоном, который в фоне ждёт передачи прошивки и запускает её от рута.

                  А вы говорите, драйвера на жс...

                  P.S. Да, ещё в "аналоге ардуино" по дефолту наличествует питон(второй), перл и gcc. Да, прямо на борту у embedded-девайса.
                  Ответить
            • Можно вопрос, а нахуя себя мучать и пытаться писать на сишке без сегфолтов, если можно просто взять кресты, взять контейнеры и получить тот же перфоманс и большую надёжность при меньших усилиях?
              Ответить
            • > не осилил писать на сишечке без сегфолтов и оверфлоу

              @guesto, научите ещё авторов OpenSSL писать без бафероверфлоу, реально достали.

              И да, сишный qsort работает примерно в 2 раза медленнее std::sort. Абсракции виноваты, наверное.
              Ответить
              • Конечно абсракции. В С++ sort ограничен: начальный и конечный итератор должны быть одного типа, типы аргументов компаратора и элементов итератора должны быть совместимыми... А в Сишке всё абсрактно: запихиваешь ужа и ежа в void* и передаёшь абсрактную функцию сравнения. Вот мы и видим на конкретном примере, как увеличение уровня абсракции негативно влияет на производительность.
                Ответить
        • Берем обычный десктопный проект. В 98% участков кода перфоманса на любую чушь хватит. Зато кое где надо прям побайтоёбить. И вот чтобы в каждом таком месте не приходилось пилить мини либу на сях и линковать её, в плюсах оставили возможности из си.
          Ответить
          • > Зато кое где надо прям побайтоёбить.
            Вот-вот. Другие пишут на всяких шарпах и жавах - и ничего, обходятся как-то без необходимости срать напрямую в память. А как кресты - так без ебли с сырыми указателями уже никак.
            Ответить
            • ...и как только узкое горло, начинают искать какую-нибудь либу, которая может, а либа написана на сях или плюсах, и внутри та самая ебля с сырыми указателями.
              Ответить
              • Я вот не представляю, что такого нужно делать в обычном десктопном проекте, чтобы узким горлом были не сеть/диск, а что-то другое, для чего нужна либа аж на сях. И уж совершенно не могу представить, как в обычном десктопном проекте может не хватит перфоманса стандартных крестовых средств.
                Ответить
                • маткад тоже
                  > обычный десктопный проект
                  > может не хватит перфоманса стандартных крестовых средств
                  Речь же шла о перфомансе стандартных джава/шарп средств? В моей предметной области достаточно много узких мест
                  Ответить
                  • > Речь же шла о перфомансе стандартных джава/шарп средств?
                    Изначально, речь шла о " В 98% участков кода перфоманса на любую чушь хватит. Зато кое где надо прям побайтоёбить", т.е. о крестах. Я и привёл пример - куча программ, даже написанных на джаве/шарпе (объективно более медленных, чем кресты, за счёт оверхеда VM), вполне работают безо всякого байтоёбства и сырых указателей.
                    > В моей предметной области достаточно много узких мест
                    Прямо НАСТОЛЬКО узких, что не хватает крестовых STL/Boost, нужно ебать память напрямую?
                    Ответить
                    • > Прямо НАСТОЛЬКО узких, что не хватает крестовых STL/Boost, нужно ебать память напрямую?
                      ... битовыми полями. Да, приходится
                      Ответить
                      • А причём тут битовые поля? Битовые операции в любом языке есть.
                        Ну и, к тому же, очень часто битовые поля - признак плохой архитектуры и попытке сэкономить пару байт на спичках.
                        Ответить
                        • Лол, а как представить много флагов в сетевом протоколе или струкьуре данных ядра?
                          Ответить
                          • > обычный десктопный проект
                            Часто тебе для десктопного проекта нужны данные ядра и свой сетевой протокол?

                            Ну и да, для передачи данных по сети обычно используют JSON/Protobuf (если нет нужды в крайне высокой производительности - вроде игр и прочего), а ядро и драйверы - слишком специфичная область, с которой я и не знаком толком.
                            Ответить
                        • например, NMEA кодирует сообщения AIS (VDM) побитово. Сетевой протокол такой.

                          В вашем представлении "обычный десктопный проект" это не игра, не инженерный софт, не математический софт, не производственный софт. Что же это? Какая-то абстрактная бесполезная хуита утилита
                          Ответить
                          • "Большая часть программ занимается преобразованием XML в стэктрейсы"
                            Ответить
                            • А в это время большая часть програм на Си закатывает солнце обратно.
                              ./test5: read and write
                              	wrote 1048576 byte file 10 times in 0.17 seconds (59032134 bytes/sec)
                              	read 1048576 byte file 10 times in 0.0  seconds (-2147483648 bytes/sec)
                              	./test5 ok.

                              Типичный вывод сишкопрограммы. (в данном случае: Connectathon - популярный инструмент для тестирования NFS).
                              Ответить
                              • Так вот как, оказывается, надо закачивать файлы обратно!
                                Зачем мне нужен unsigned? У меня нет времени, чтобы ебаться с ним!
                                Ответить
                              • Ну всё правильно же. Туда байты отправлялись - плюс, обратно - минус. Скорость - векторная величина, тащемта.
                                Ответить
                          • > производственный софт
                            По моему представлению, в производственном софте главное - всё же надёжность. А байтоёбство и прямая работа с памятью надёжности не прибавляет.

                            > математический софт
                            Вот здесь производительность как-раз может быть боттлнеком. Однако, вы часто пишете математический софт, когда есть Wolfram/MathCAD/etc?

                            > инженерный софт
                            Какой именно? САПРы?

                            > игра
                            Здесь байтоёбинг может быть уместен, хотя и не всегда нужен.

                            > NMEA кодирует сообщения AIS (VDM) побитово
                            Эээ... "NMEA 0183 is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other types of instruments." - мы о десктопе говорим, или уже переместились в мир микроэлектроники? Если переместились - я, пожалуй, покину дискуссию, ибо знанями о морском оборудовании и GPS приёмниках не обладаю.
                            Ответить
                            • лично я в основном занимаюсь отладочным/измерительным/настроечным софтом для производства свч модулей.
                              Ответить
    • Выход из вложенного цикла, плюсы. Допустимо.
      Ответить
      • Вопрос в том, насколько хуево организована функция, что в ней на ровном месте появился цикл, из которого надо выходить через goto.
        Ответить
        • Иногда (редко) не получается выкусить пару вложенных циклов в осмысленную функцию. Для этих случаев goto допустимо (всё лучше, чем флагоёбство или функция через силу).
          Ответить
          • смутно представляю себе ситуацию, где goto адекватен и не заменяется на scoped exit. В более простых случаях (для освобождения ресурсов) можно оборачивать их в unique_ptr с указанием deleter'а.
            Ответить
            • Да всякая расчётная хуита алгоритмика, у которой куча локального контекста (поэтому не вытащить эти циклы в функцию).

              > scoped_exit
              > unique_ptr
              Ну а вот это как раз не в тему. Там не надо освобождать ресурсы. Там надо просто прервать 2 цикла и продолжить код под ними, причём не по ошибке (поэтому исключение кидать не вариант).

              Штука редкая, в типичном хуяк-хуяк-в-продакшен (где большинство циклов красиво заменяется на всякие find'ы) не встречается.
              Ответить
              • можно прям на месте слепить лямбду с захватом [&] и возвратом через return 😉
                Ответить
                • радиоактивный Эдсгер Дейкстра укусил Antervis, и он превратился в супергероя -- человека-Дейкстру

                  -- а-а-а-а, кто-то где-то использует goto
                  -- срочно замените его на throw/catch!
                  или на лямбду!
                  Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8