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

    −1

    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
    27. 27
    #include <boost/hana.hpp>
    #include <boost/hana/ext/std/tuple.hpp>
    #include <cstdint>
    
    namespace hana = boost::hana;
    using namespace hana::literals;
    using hana::transform, hana::decltype_, hana::to_set, hana::type_c;
    
    auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
      
      n.times.with_index([&](auto x) {
        
        if constexpr(x == s) {
          ++in;
        } else {
          *(uint16_t *)out = *(uint16_t *)in;
          out +=2; in += 2;
        }
        
      });
      
      return in;
    };
    
    auto f(uint8_t * in, uint8_t * out) {
        return copy(in, out, 33_c, 15_c);
    }

    https://habr.com/ru/post/482834/#comment_21094618
    > Простая задача, самый базовый вариант https://godbolt.org/z/5F5mt9 — повторите.

    Очередные набросы крестоговна на хабр от царя.

    Найдите UB.

    Запостил: j123123, 06 Января 2020

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

    • #include <boost/hana.hpp>
      #include <boost/hana/ext/std/tuple.hpp>
      #include <cstdint>
      
      namespace hana = boost::hana;
      using namespace hana::literals;
      using hana::transform, hana::decltype_, hana::to_set, hana::type_c;
      
      auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
        
        n.times.with_index([&](auto x) {
          
          if constexpr(x == s) {
            ++in;
          } else {
            __builtin_memmove(out, in, sizeof(uint16_t));
            out +=2; in += 2;
          }
          
        });
        
        return in;
      };
      
      auto f(uint8_t * in, uint8_t * out) {
          return copy(in, out, 33_c, 15_c);
      }



      Починил
      Ответить
      • И нахуя тут выебываться со всякими ханами-хуянами? Это тупое примитивное говно, которое я и на гнуси напишу без особых проблем.

        #include <inttypes.h>
        #include <stddef.h>
        
        inline uint8_t * copy(uint8_t * in, uint8_t * out, size_t n, size_t s) __attribute__ ((always_inline));
        
        inline uint8_t * copy(uint8_t * in, uint8_t * out, size_t n, size_t s)
        {
          for(size_t x = 0; x < n; x++)
          {
            if(x == s)
            {
              ++in;
            }
            else
            {
              __builtin_memmove(out, in, sizeof(uint16_t));
              out +=2; in += 2;
            }
          }
          return in;    
        };
        
        uint8_t *f(uint8_t * in, uint8_t * out)
        {
          return copy(in, out, 33, 15);
        }
        Ответить
        • > тупое примитивное говно
          memmove(out, in, s * 2);
          memmove(out + s * 2, in + s * 2 + 1, (n - s) * 2);
          Ответить
          • А если (n - s) окажется отрицательным?
            Ответить
          • ну и еще надо вернуть сдвинутый указатель in
            Ответить
        • Гнуси, гнуси!
          Га-га-га!
          Есть хотите?
          Да-да-да!
          Ответить
          • Жили у бабуси
            Две весёлых гнуси:
            Одна gcc,
            Другая g++,
            Я с ними ебуся.
            Ответить
            • Ве фингс ароунд ми вер ай си
              Рамайнд ми оф, ве паст анд хау ю аалл юзд то бе...

              Ай клоуз май асз анд си ю фейс.
              Ответить
              • Ай клоуз май асс анд писс ю фейс
                Грамотей блять.
                Ответить
        • А нахуя int16_t?
          Ответить
          • Пирфоманс.
            Ответить
            • Сколько пирфоманса, питушок? Сколько пирфоманса, анскилечка? Это классика! Это знать надо, если ты учился в шестом училище!
              Ответить
            • Почему не 32 или 64? Это код для какого-нибудь MSP430?
              Ответить
              • Наверное, с 32 или 64 был бы слишком большой пирфоманс.
                Кто этого Царя знает. Он же поехавший совершенно.
                Ответить
              • >> Систему команд постарались сделать максимально ортогональной с разнообразными способами адресации. Ортогональность системы команд означает, что в любой команде может использоваться любой способ адресации операнда: константа, прямой из регистра или памяти, косвенный и т. п.

                Круто.
                Ответить
              • >> Ключевым отличием и «визитной карточкой» семейства MSP430 является возможность тактировать любой модуль периферии асинхронно от ядра.

                Интересно.
                Ответить
            • показать все, что скрытоvanished
              Ответить
              • Специально для подобных сложных случаев был сделан https://gcode.space/#!/search?user=adrnin.
                Ответить
                • Не отвечай уёбку.
                  Ответить
                  • Не отвечай уёбку.
                    Ответить
                    • Ок.
                      Ответить
                      • Не отвечай уёбку.
                        Ответить
                        • Не отвечай уёбку.
                          Ответить
                          • Не отвечай уёбку.
                            Ответить
                            • Не отвечай уёбку.
                              Ответить
                              • Не отвечай уёбку.
                                Ответить
                                • Segmentation fault
                                  Ответить
                                  • Дедовское средство для увеличения стека до 10см без смс и регистрации. Удиви своих партнёров, узнай рецепт сейчас. >>> Читать далее <<<
                                    Ответить
                                    • У меня дежавю. Мне кажется, что что-то подобное я уже видел на «Говнокоде».
                                      Ответить
                                    • Дедовское средство для ловли карася, с которым улов увеличивается в 3-5 раз
                                      17 сентября 2018
                                      17 тыс. дочитываний
                                      1,5 мин.
                                      20 тыс. просмотров. Уникальные посетители страницы.
                                      17 тыс. дочитываний, 84%. Пользователи, дочитавшие до конца.
                                      1,5 мин. Среднее время дочитывания публикации.

                                      Дед говорил, что карась - хитрая рыба, но и его можно легко заманить. И для этого не потребуется танцы с бубнами возле костра на берегу водоёма.

                                      Есть хитрое аптечное средство, о котором многие догадывались и все почти знают, но на практике пока еще не использовали. К тому же с таким средством рыбалка становится совсем не затратной. Пузырек стоит всего-то 20-30 рублей!

                                      А что это за средство? - Валерьянка - капли валерьяны, которые есть в каждой аптеке!

                                      Старое Дедовское средство для ловли карася, с которым улов увеличивается в 3-5 раз. Валерьянка на карасиков
                                      Ответить
                                      • Накапать валерьянки коту, и, пока кот в трансе, отправить его ловить карасиков?
                                        Ответить
                                        • Можно ловить сомов, окуней, щук на живца. В отличие от женщин, рыбы твой вялый червячок оценят.
                                          Ответить
                                    • Именно поэтому я за итеративные алгоритмы
                                      Ответить
                                      • Почитай своим детям на ночь "Дорожное происшествие Сорокина".
                                        После того, как они отшлёпают тебя книжкой по башке, вся дурь улетчится.
                                        Ответить
                • Сделай касе инсенситиве.
                  Ответить
                  • Передали в инженерный отдел.
                    Ответить
                    • Я малость беспокоюсь за ваш инженерный отдел. Сначала более-менее нормальные посты, потом чуток старик вореций побежало местами. Алгоритмизация навела поле раскола индивида на протокольные субличности. Стандартизация субличностей образовала инжерный отдел. Инжерный отдел поехал к сиплюсу. Сиплюс поехал к инжерному отделу. Стандартизация преобразовала UB в гетерогенную психозу полного спектра. У зрителей волнуется вопрос о химическом здоровье госта.
                      Ответить
                      • Ничего не понял. Именно поэтому я за ${"PHP"}.
                        Ответить
                      • Всё в порядке. Наш инженерный отдел временно переквалифицировался в рыболовный и ловит щук.
                        Кстати, щука одной из первых пресноводных рыб отправляется на нерест. Брачный сезон начинается при температуре воды 3-5°C. Обычно икромет происходит в марте, но при изменении температурного режима может затянуться или ускориться. Нерестилище находится на отмелях, в зарослях камыша, осоки, кустов. Глубина не превышает 2 м. Около одной самки обычно следует несколько самцов. Для икромета рыба активно использует любые предметы, о которые можно потереться. Период размножения может длиться от 2 до 4 недель. Во время паводка часто гибнет много щучьего потомства.
                        Ответить
          • Для анскильных питушков. Надо использовать char, short, int, long long.
            Ответить
            • А какой из них будет самым быстрым при купировании?
              Ответить
          • Ты аву макаки поставь, страйкир тебя сразу сотрёт.
            Ответить
    • > Пошло забалтывание, пошел уход с темы. Главное переключить внимание наблюдателя. Всё равно мало кто знает — что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат.

      soooooqaaaa
      Ответить
      • >что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат.
        Поддерживаю. Я просто пишу на js и в душе не ебу что такое УБ
        Ответить
        • В JS полно всякой implementation-dependent и implementation-defined фигни
          https://stackoverflow.com/questions/14863430/does-javascript-have-undefined-behaviour

          Хотя там ниже пишут и про какой-то "behaviour is undefined"

          > If the toFixed method is called with more than one argument, then the behaviour is undefined (see clause 15).
          Ответить
          • В JS это ответы на философские и риторические вопросы вроде "что будет, если отсортировать элементы с одинаковым значением?".
            В C/C++ это ответы на вопрос "что будет, если программист не выучил все случаи из толстенного стандарта и их хитрые комбинации?". Если банальная работа с union, где нет никаких неоднозначностей, вызывает UB, то о чём тут говорить.

            В JS значение будет разное в разных интерпретаторах, но будет относиться к теме, а вычисления пойдут дальше в штатном режиме.
            В C/C++ программу распидорасит и дальше её можно только выкинуть.

            Думаю, разница ясна.
            Ответить
      • Пошло забалтывание, пошел уход с темы. Главное переключить внимание наблюдателя. Всё равно мало кто знает — что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат. Впрочем, есть крайне информированные люди, которые догадываются — УБ это Управление Баттхертом. Причём внедрение осуществляется без помощи технических средств. Правда, против этого возразить трудно. УБ — это не просто УБ. Это целое системное операционное пространство, полное технических ловушек и вывернутых наизнанку говнокодовых стратегий. Чтобы выяснить, что такое УБ, нужно попробовать придумать такую векторную операционную систему виртуальных чипов, которая бы мыслила не самыми абстрактными категориями и могла наделить УБ человеческими характеристиками. Если получится, такие системы не будут создаваться вообще. А чтобы создать такую программу, нужна программа-ускоритель.
        Ответить
    • >> char, signed char и unsigned char — три разных типа, и алиасить может только первый.

      А тут, как мне кажется, заблуждается оппонент царя. char — это эквивалент либо signed char, либо unsigned char, в зависимости от настроек компилятора. Аналогично, int, long int, long long int — это эквиваленты signed int, signed long int, signed long long int соответственно (всегда). Не бывает просто типов без signed/unsigned.
      Ответить
      • char — это эквивалент либо signed char, либо unsigned char, в зависимости от настроек компилятора.
        Нет: https://wandbox.org/permlink/oOQTbe8nyYxHZxbj
        Ответить
        • Какой багор )))

          Что же тогда представляет собой char, если он не signed, но и не unsigned?

          Почему int без квалификатора эквивалентен signed int, а для чара исключение?
          Ответить
          • Хуй его знает. Так решили застандартизировать
            Ответить
        • Кстати там этот typeof() совершенно необязателен: https://wandbox.org/permlink/ud3UuShJfZtAfDRd

          Про это говно со сравниванием типов через _Generic можно тут почитать https://stackoverflow.com/a/53841007
          Ответить
      • Но сама исходная цитата:
        >> char, signed char и unsigned char — три разных типа, и алиасить может только первый.

        Не вполне верна. См. https://stackoverflow.com/a/40575162

        Хотя может в крестоговне какие-то свои правила на сей счет, хуй их знает
        Ответить
      • «C++»:
        Type char is a distinct type that has an implementation-defined choice of “signed char” or “unsigned
        char” as its underlying type. The values of type char can represent distinct codes for all members of
        the implementation’s basic character set. The three types char, signed char, and unsigned char are
        collectively called ordinary character types. The ordinary character types and char8_t are collectively called
        narrow character types. For narrow character types, each possible bit pattern of the object representation
        represents a distinct value.
        § 6.8.1, 7

        «C»:
        An object declared as type char is large enough to store any member of the basic execution character
        set. If a member of the basic execution character set is stored in a char object, its value is guaranteed
        to be nonnegative. If any other character is stored in a char object, the resulting value is implementation-
        defined but shall be within the range of values that can be represented in that type.
        § 6.2.5, 3

        The three types char, signed char, and unsigned char are collectively called the character types.
        The implementation shall define char to have the same range, representation, and behavior as either
        signed char or unsigned char.47)
        § 6.2.5, 15

        47)CHAR_MIN, defined in <limits.h>, will have one of the values 0 or SCHAR_MIN, and this can be used to distinguish the
        two options. Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
        § 6.2.5, сноска 47
        Ответить
        • Гамон.

          В «Паскале», хоть и система названий типов непоследовательна (слишком много названий без префиксов типа word, которые приходится запоминать), существует чёткое разделение типов по предназначению:
          • char предназначен только для хранения одного символа (неюникодовского, из местной кодировки);
          • byte предназначен только для хранения беззнакового числа, которое помещается в один байт;
          • shortint предназначен только для хранения знакового числа, которое помещается в один байт.

          В сишке же char по историческим причинам может хранить и символ, и число. Причём, когда он хранит число, по факту он играет роль либо signed char, либо unsigned char (implementation defined; у некоторых компиляторов есть ключик для выбора signed либо unsigned). Однако, из соображений осторожности char не рискнули отождествить ни с signed char, ни с unsigned char. Создали кота Шрёдингера.

          Я не понимаю, как «its value is guaranteed to be nonnegative» сочетается с «either signed char or unsigned char».
          Ответить
          • > Я не понимаю, как «its value is guaranteed to be nonnegative» сочетается с «either signed char or unsigned char».
            Это когда в нём хранится «member of the basic execution character set».
            The basic source character set consists of 96 characters: the space character, the control characters representing
            horizontal tab, vertical tab, form feed, and new-line, plus the following 91 graphical characters:
            a b c d e f g h i j k l m n o p q r s t u v w x y z
            A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
            0 1 2 3 4 5 6 7 8 9
            _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’

            The basic execution character set and the basic execution wide-character set shall each contain all the
            members of the basic source character set, plus control characters representing alert, backspace, and carriage
            return, plus a null character (respectively, null wide character), whose value is 0. [...]
            § 5.3/1, 3
            Ответить
            • Ну то есть если хранится семибитный символ, то, добавив один бит, его можно поместить как в знаковую, так и в беззнаковую обёртку.

              Значит, не гарантируется интерпретация значений за пределами «basic execution character set»?
              Ответить
              • То есть гарантируется, что все символы из «BECS», помещённые в char, будут представлены неотрицательными числами. А насчёт остальных уже сказать ничего нельзя.

                Что ты имеешь в виду под «интерпретацией значений»?
                Ответить
                • "Проглоти мою сперму."
                  Ответить
                • > Что ты имеешь в виду под «интерпретацией значений»?
                  Думаю, новпитух пишет про случай, когда ты делаешь scanf("%c", &kokoko); printf("%c", kokoko), пользователь вводит "я", и у тебя либо выводится "я" (значение интерпретировалось как надо), либо программа форматирует диск (не интерпретировалось, случилось UB)
                  Ответить
                  • Судя по «For narrow character types, each possible bit pattern of the object representation represents a distinct value» — диск не отформатируется. Но вот что такое «character» — я в Стандарте так и не раскопал, только вот такой багор:
                    basic_ostream<charT, traits>& put(char_type c);
                    2 Effects: Behaves as an unformatted output function (as described above). After constructing a sentry
                    object, inserts the character c, if possible.
                    3 Otherwise, calls setstate(badbit) (which may throw ios_base::failure (29.5.5.4)).
                    § 29.7.5.3/2,3
                    А когда оно не «possible» — хуй знает.
                    Ответить
            • >> horizontal tab, vertical tab, form feed, and new-line

              Я vertical tab и form feed видел только в документах, предназначенных для печати на матричном принтере.

              Этими символами сейчас хоть кто-нибудь пользуется?
              Ответить
              • Не знаю что это. Я пользуюсь "<br>" и "&nbsp;" и теку.
                Ответить
                • Именно поэтому я за 《PHP》.
                  Ответить
                  • М-м-м, какой у тебя большой… шрифт!
                    Ответить
                    • http://alanwood.net/unicode/halfwidth_and_fullwidth_forms.html

                      Нафиг они нужны, я не знаю.
                      Ответить
                    • PHP
                      PHP

                      Лучше бы сделали буквы на всю ширину.
                      Ответить
                      • ╔╗╥╥╔╗
                        ╠╝╠╣╠╝
                        ╨ ╨╨╨
                        Ответить
                        • ╥ ┬     ┌╖ ╥ ┬  ┌─╖  ╥ o ┌╥      ┌─┐╥ ┬  ╥   ┌╥     ┌╥     ┌╥
                          ║┌┘    ┌┘║ ║┌┘ ┌┘ ╚╗ ║  ┌┘║     ┌┘  ║┌┘  ║  ┌┘║    ┌┘║    ┌┘║
                          ╠╧╗   ┌┘ ║ ╠╧╗ │   ║ ║ ┌┘ ║     │   ╠╧╗  ║ ┌┘ ║   ┌┘ ║   ┌┘ ║
                          ║ ╚╗ ┌┴──╢ ║ ╚╗└┐ ╔╝ ║┌┘  ║     └┐  ║ ╚╗ ║┌┘  ║  ┌┘  ║  ┌┘  ║
                          ╨  ╨ ┴   ╨ ╨  ╨ ╘═╝  ╨┘   ╨      └─┘╨  ╨ ╨┘   ╨ └┘   ╨ └┘   ╨
                          Ответить
    • Хватит забивать голову этими богомерзкими закорючками. Несмотря на то, что я в It уже восьмой год, я не видел за это время ни одной проги на сях.
      Ответить
      • Действительно, я за 5 лет не видел ни одного полезного кода, написанного не на JS.
        Ответить
        • Уёбок, зачем ты это делаешь?
          Ответить
          • Потому что меня заебали уёбки в лице guestinxo и guest8. Допили свою тупую игнорилку чтоб скрывала ответы "уёбкам" и отъебись.
            Ответить
            • > Допили свою тупую игнорилку чтоб скрывала ответы "уёбкам" и отъебись.
              Теория guestinxo состоит в том, что если стерторов полностью игнорировать всем сайтом — стерторы выведутся. Именно поэтому он против «ответов уёбкам».
              Ответить
              • У меня ворота в гараж подпирает собачья будка. Чтобы заехать/выехать нужно загнать собаку в домик, и открыть ворота, подперев ей выход. Собака в любой момент может открыть и ударить, в.т.ч. по произжающей в этот момент машине. Я мог бы завязать веревкой, чтобы это предотвратить, но этого не делаю. Понимаешь о чём я?
                Ответить
                • Ничего не понял. Я вообще против «собак»: они злые, гавкают и пытаются укусить.
                  Ответить
                • Ты случайно не жил в городе Шильда?
                  Ответить
                  • > Население составляет 490 человек.

                    Мля, деанон :(
                    Ответить
                    • Чёрт, это реальный топоним. Когда писа́л комментарий, я думал, что он существует только в сказке.
                      Ответить
            • Хрюкни.
              Ответить
            • Ладно, теперь я перелогиниться в гостинхо.
              Ответить
    • > if constexpr

      А как это работает с некококонстантами?
      Ответить
      • В рантайме?
        Ответить
        • В чём тогда смысл "constexpr", питушок? Не с т.з. автора кода, а компилятора.
          Ответить
      • «In a constexpr if statement, the value of condition must be a contextually converted constant expression of type bool. If the value is true, then statement-false is discarded (if present), otherwise, statement-true is discarded.»
        Ответить
        • Хрюкни.
          Ответить
        • Ничего не понял, я анскильный. Я думал в скобках можно писать только компайлтайм вычислимые выражения.
          Ответить
          • Ты всё правильно понял.
            Ответить
            • Но приведённый код компилится. Почему?
              Ответить
              • «x», «n» и «s» — это не инты, а какое-то бустовое говно (отнаследованное от «std::integral_constant»), которое конпелятор вычисляет в компайл-тайме.
                Ответить
                • > auto n, auto s, auto x

                  Чиво? Я вижу это как параметры функции. Какая разница какого они типа?
                  Ответить
                  • А, кажется начинает доходить. Весь "цикл" "n.times" - это всё компайлтайм параша?
                    Ответить
                    • Да, n.times(f) в компайл-тайме раскрывается в n вызовов f. Прямо как в #26274, только на «Буст».
                      Ответить
                • > 33_c, 15_c

                  Сколько там это бустоговно компилируется?)
                  Ответить
    • показать все, что скрытоvanished
      Ответить
      • Как я понял, s = 15, а x переберётся (в компайлтайме) от от 0 до 32 (но это не инты, а шаблоноговно над ними).
        Ответить
    • Ругается на if constexpr:
      error: '__closure' is not a constant expression
      Ответить

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