1. C++ / Говнокод #20047

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 20 Мая 2016

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

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

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

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

            > Как-бы если нужен пирфоманс и байтоёбство - идём насишечку
            У меня всегда бомбит от этого тезиса. Насишечку идут, когда нужны сегфолты и буфероверфлоу. А перфоманс и байтоебство можно и в плюсах, не отказывая себе в прелестях RAII, ооп и прочих абстракций.
            Ответить
            • У тебя бомбит видимо от того, что ты не осилил писать на сишечке без сегфолтов и оверфлоу.
              А другие осилили. Например написавшие ту ОС, под управлением которой ты сейчас пишешь эту чушь
              Ответить
              • Я и не пытался осиливать. Еще скажи, что у меня бомбит, потому что я говно на завтрак не ем.
                Ответить
                • Ну вот в том и дело, что даже не пытался. Потому и несешь ламерскую хуйню про сегфолты, которую вычитал на каком нибудь глупом форуме
                  Ответить
                  • Таки непонятно обвинение. Хочешь сказать, что в плюсах нельзя в пирфоманс? Или хочешь сказать, что в си есть приличные средства абстракции (кроме макросов, лел)? Или что си хоть как-то защищает программиста от выстрела в ногу?
                    Эко у тебя бомбануло от посягательства на свитую сишечку, что ты аж диагнозы мне начал ставить.
                    Ответить
                    • В сях есть вполне годные средства абстракций вроде непрозрачных типов. Бомбануло меня от того, что глупый неосилятор имеет наглость судить о том, в чем не разобрался. Ты песдиш что в сях всегда есть оверфлоу. Но это не так. Достаточно просто думать головой
                      Ответить
                      • Отсоси маня, я про синьер дивелопер и хуй у меня длинее.
                        Ответить
                        • отсосите оба, я тимлид, а сишка говно, кресты говно, эрланг говно, все остальные языки говно, весь код говно, вся цивилизация говно, а человек несовершенен, но, к счастью, смертен
                          Ответить
                          • > все остальные языки говно, весь код говно, вся цивилизация говно, а человек несовершенен,
                            https://www.youtube.com/watch?v=ImXeMoKBAHs
                            Ответить
                          • > отсосите оба
                            прямо как в той истории про молдаван, бордель и 10 баксов
                            Ответить
                        • >>я про ... хуй

                          а я про программирование
                          Ответить
                      • Вот как раз очень мощную абстракцию запостили: 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 в 2016 использовать
      Ответить
      • Выход из вложенного цикла, плюсы. Допустимо.
        Ответить
        • Вопрос в том, насколько хуево организована функция, что в ней на ровном месте появился цикл, из которого надо выходить через goto.
          Ответить
          • Иногда (редко) не получается выкусить пару вложенных циклов в осмысленную функцию. Для этих случаев goto допустимо (всё лучше, чем флагоёбство или функция через силу).
            Ответить
            • смутно представляю себе ситуацию, где goto адекватен и не заменяется на scoped exit. В более простых случаях (для освобождения ресурсов) можно оборачивать их в unique_ptr с указанием deleter'а.
              Ответить
              • Да всякая расчётная хуита алгоритмика, у которой куча локального контекста (поэтому не вытащить эти циклы в функцию).

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

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

                    -- а-а-а-а, кто-то где-то использует goto
                    -- срочно замените его на throw/catch!
                    или на лямбду!
                    Ответить
                    • Бох с вами. Дейкстра о сроу кетч и не думал
                      Ответить
    • > asd

      "Now, that's a name I've not heard in a long time."
      Ответить
    • http://huifikator.ru/?http%3A%2F%2Fgovnokod.ru%2Fcomments%2F1 9980%2Fpost
      Ответить

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