1. Си / Говнокод #20418

    −47

    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
    Имеем приблизительно такой код
    
    #define XXX(n) ar[n]=s._field_##n;
    XXX(01);
    XXX(02);
    XXX(03);
    XXX(04);
    XXX(05);
    XXX(06);
    XXX(07);
    XXX(08);
    
    Естесвенно при при компиляции получаем ошибку, т.к. 08 это неправильная восмеричная константа. Обойти можно так
    
    #define XXX(n) ar[1##n-100]=s._field_##n;
    
    Но как-то это некрасиво. Может есть более красивый подход?

    https://www.linux.org.ru/forum/development/12607523

    Запостил: j123123, 24 Июля 2016

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

    • enum nums
      {
          n_00 = 0,
          n_01,
          n_02,
          n_03,
          n_04,
          n_05,
          n_06,
          n_07,
          n_08,
          n_09,
          n_10,
          n_11
      // ...
      };
      
      #define XXX(n) ar[n_##n]=s._field_##n;
      XXX(01);
      XXX(02);
      XXX(03);
      XXX(04);
      XXX(05);
      XXX(06);
      XXX(07);
      XXX(08);
      Ответить
    • А еще это можно обойти через внешний препроцессор
      Ответить
    • > более красивый подход?
      Ну вот он один фиг генерит хедер из текстового файлика. Может проще тем же генератором и эту сишную функцию сгенерить?

      З.Ы. Или одноимённые поля сразу сворачивать в массив, во время генерации хедера (hui01, hui02, hui03 -> hui[3]). Я не думаю, что есть кейсы, где DigitalInput[3] будет смотреться хуже чем DigitalInput03 (разве что если они не по порядку пронумерованы).
      Ответить
      • А если б сишный препроцессор был фукнциональней, например позволял бы изменять хрень, которая в макрос передается (а не только соединять через ##) и допускал бы возможность нахуячивания условий, циклов и прочей хуйни, можно было бы пооткусывать лидирующие нули от хрени, которая в макрос передается. И вообще, надо чтоб гомоиконность!
        Ответить
        • .                                                                             .
                       ____________________________________________________
                      /                                                    \
                     |    _____________________________________________     |
                     |   |                                             |    |
                     |   | '(Метушня                                   |    |
                     |   |   Гомоиконы                                 |    |
                     |   |   '(Метаобъектный протокол)                 |    |
                     |   |   DSL                                       |    |
                     |   |   "Петушня all the way down"                |    |
                     |   |   макроёбство                               |    |
                     |   |   '(Beating the averages))                  |    |
                     |   |                                             |    |
                     |   |                                             |    |
                     |   |_____________________________________________|    |
                     |                       Symbolics               ooo    |
                      \_____________________________________________________/
                             \_______________________________________/
                          _______________________________________________
                       _-'    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_
                    _-'.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_
                 _-'.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_
              _-'.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-_
           _-'.-.-.-.-.-. .---.-. .-----------------------------. .-.---. .---.-.-.-.`-_
          :-----------------------------------------------------------------------------:
          Ответить
          • https://lurkmore.to/LISP#.D0.93.D0.BE.D0.B0.D1.82.D1.81.D0.B 5.21
            (кстати это не я туда это добавил)
            Ответить
            • Лиспер — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус победил посредственность настолько, что он без труда мог спрятать в нём лисп-машину.
              Ответить
    • #define FORMAT(n) FORMAT##n
      #define FORMAT0  00
      #define FORMAT1  01
      #define FORMAT2  02
      #define FORMAT3  03
      #define FORMAT4  04
      #define FORMAT5  05
      #define FORMAT6  06
      #define FORMAT7  07
      #define FORMAT8  08
      #define FORMAT9  09
      #define FORMAT10 10
      #define FORMAT11 11
      Ответить
    • У меня есть банальный, но довольно красивый подход:
      XXX( 1)
      XXX( 2)
      /* ... */
      XXX( 8)
      XXX( 9)
      XXX(10)
      XXX(11)
      /* ... */
      Ответить
      • field_1 не найдено, возможно вы имели в виду field_01
        Ответить
        • Можно задефайнить field_1..field_9. В удачном случае это составит всего около 10% от количества XXX.
          Ответить
    • А если так?
      https://ideone.com/zLJFyb
      На C++ это легко пилится в компайл-тайме, а вот как сишным препроцессором так же сделать - хз...
      Ответить
    • > Но как-то это некрасиво. Может есть более красивый подход?

      да. сделать из кривого массива (s._field_##n), нормальный массив, и не страдать х-ней.
      Ответить
    • govnokod.ru/20418#comment341004
      Ответить
      • Чепуха! Вот если подобный комментарий отправить от гостя без возможности правки, совсем другое дело!
        Ответить
        • Там же +1
          Ответить
          • А как же сквозная нумерация комментариев во всех ГК и конкуренция?
            Ответить
            • Вероятность крайне мала.
              Кстати, Пи некогда говорил, что можно и от гостя, и пост со своим номером запилить.
              А я ещё где-то постил скрипт для автоматического создания таких комментариев на основе Пи-теории.
              P. S. http://govnokod.ru/19807#comment321479
              Ответить
              • Там автоинкремент, в чем проблема? Берешь макс номер поста из стока и хуяришь.
                Ответить
                • Проблемы нет.

                  Вот с говнокодами - проблема есть. Там, хоть и на практике реально сделать, но в общем случае математически невозможно без перебора диапазона типа айдишника поста запостить ГК с его номером.

                  На ГК есть 4 варианта ГК - существующие, заминусованные, удалённые и несуществующие. Причём удалённые выглядят так же, как несуществующие. Заминусованные говнокоды заставляют не доверять главной и в общем случае перебирать все посты, возможен бинарный поиск. Удалённые говнокоды нарушают бинарный поиск, т.к. граница "сущесвующий-несуществующий" стирается, нужен полный перебор.
                  Нужно постить либо во время, когда давно не было удалённых постов, либо быстро создавать два поста, один из них быстро заминусовывать, чтобы он не появился ни в стоке, ни на главной не задержался.
                  Ответить
                  • Проблемы с чем нет?

                    С гк тоже в чем проблема? Постишь первый, смотришь номер, быстро постишь второй.
                    Ответить
                    • Проблемы с номером комментария нет. Если действовать быстро и без записи, можно получить номер за O(1) запросов.
                      Проблему с номером ГК описал. Если действовать быстро и без записи, можно получить номер за O(N) запросов, за O(logN) в нормальное время и за O(1) в добровремя.
                      Ответить
                • За то время, пока хуяришь, твой конкурент может успеть отправить комментарий. Тогда твой комментарий будет опубликован не под номером (N+1), как ты посчитал, а под (N+2).
                  Ответить
                  • Так отправь еще один. Руки не отвалятся.
                    Ответить
                    • Ну и будет питушня вроде

                      ▲ ▲
                      или http://lurkmore.to/images/8/82/3kget_legendary.jpg, за которую никто уважать не будет.
                      Правда, за номер в посте тоже уважать никто не будет, но хоть не залошат.
                      Ответить
                    • Если окажешься везунчиком, то и перед следующим комментарием кто-то успеет что-нибудь отправить.

                      В теории процесс может оказаться бесконечным.
                      Ответить
                      • www, залогинься.
                        Ответить
                        • Если www залогинится, то это увеличит вероятность возникновения гонки?
                          Ответить
                          • У него мало постов, хоть они и жирные.
                            Ответить
                          • Кстати, о wvxvw. Его говнокод #15709 набрал 886 комментариев, причём id wvxvw = 988 - перевёрнутое 886.
                            http://imgur.com/Xg1XKWn
                            Ответить
                            • Самое замечательное число — 73. Вы скорее всего теряетесь в догадках почему?
                              — Нет!
                              — И в мыслях не было!
                              — 73 — это двадцать первое простое число, его зеркальное отражение 37 является двенадцатым, чьё отражение 21 является результатом умножения — не упадите — семи и трёх!


                              Тебе делать нехуй? :)
                              Ответить
                              • Да я решил ответить на "У него мало постов, хоть они и жирные." тем, что из-за таких больших и не открывается тот говнокод (правда же, там вореционным генератором по 1.5К добрая половина комментариев запилена), решил проверить да открыл список самых комментируемых постов. Конечно, я сразу обнаружил, что чёткого подтверждения моим мыслям нет (хотя, опровержения - тоже, пока мы не измерим объём комментариев), а у того ГК больше всех комментариев. И вот глянул случайно на соседний пост, а там 886 комментариев. Решил, что похоже на id wvxvw.
                                Ответить
                                • Так там не с его поста срач начался, а с поста Романа "вот за такие игры и вводят войска".
                                  Ответить
                                  • В #15709 не переходил, мимокрокодил.

                                    Там Роман обратил внимание на название шрифта «Акбар», а пидар влез с Украиной?
                                    Ответить

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