Няшная / Говнокод #20418 Ссылка на оригинал

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
Имеем приблизительно такой код

#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 j123123, (Updated )

Комментарии (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    |
                    \_____________________________________________________/
                           \_______________________________________/
                        _______________________________________________
                     _-'    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_
                  _-'.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_
               _-'.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_
            _-'.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-_
         _-'.-.-.-.-.-. .---.-. .-----------------------------. .-.---. .---.-.-.-.`-_
        :-----------------------------------------------------------------------------:
        Ответить
          • Лиспер — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус победил посредственность настолько, что он без труда мог спрятать в нём лисп-машину.
            Ответить
  • #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_9. В удачном случае это составит всего около 10% от количества XXX.
        Ответить
  • А если так?
    https://ideone.com/zLJFyb
    На C++ это легко пилится в компайл-тайме, а вот как сишным препроцессором так же сделать - хз...
    Ответить
  • > Но как-то это некрасиво. Может есть более красивый подход?

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

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

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

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

                    В теории процесс может оказаться бесконечным.
                    Ответить
                      • Если www залогинится, то это увеличит вероятность возникновения гонки?
                        Ответить
                          • Самое замечательное число — 73. Вы скорее всего теряетесь в догадках почему?
                            — Нет!
                            — И в мыслях не было!
                            — 73 — это двадцать первое простое число, его зеркальное отражение 37 является двенадцатым, чьё отражение 21 является результатом умножения — не упадите — семи и трёх!


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

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

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

Из-за тебя ушел bormand, guest!

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


    8