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

    −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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    // https://github.com/stedolan/jq/blob/3ea0199e031e98e92670a25e4323bd711005b5db/src/jv.h#L157
    
    #define JV_OBJECT_1(k1) (jv_object_set(jv_object(),(k1),jv_null()))
    #define JV_OBJECT_2(k1,v1) (jv_object_set(jv_object(),(k1),(v1)))
    #define JV_OBJECT_3(k1,v1,k2) (jv_object_set(JV_OBJECT_2((k1),(v1)),(k2),jv_null()))
    #define JV_OBJECT_4(k1,v1,k2,v2) (jv_object_set(JV_OBJECT_2((k1),(v1)),(k2),(v2)))
    #define JV_OBJECT_5(k1,v1,k2,v2,k3) (jv_object_set(JV_OBJECT_4((k1),(v1),(k2),(v2)),(k3),jv_null()))
    #define JV_OBJECT_6(k1,v1,k2,v2,k3,v3) (jv_object_set(JV_OBJECT_4((k1),(v1),(k2),(v2)),(k3),(v3)))
    #define JV_OBJECT_7(k1,v1,k2,v2,k3,v3,k4) (jv_object_set(JV_OBJECT_6((k1),(v1),(k2),(v2),(k3),(v3)),(k4),jv_null()))
    #define JV_OBJECT_8(k1,v1,k2,v2,k3,v3,k4,v4) (jv_object_set(JV_OBJECT_6((k1),(v1),(k2),(v2),(k3),(v3)),(k4),(v4)))
    #define JV_OBJECT_9(k1,v1,k2,v2,k3,v3,k4,v4,k5) \
        (jv_object_set(JV_OBJECT_8((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4)),(k5),jv_null()))
    #define JV_OBJECT_10(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5) \
        (jv_object_set(JV_OBJECT_8((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4)),(k5),(v5)))
    #define JV_OBJECT_11(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6) \
        (jv_object_set(JV_OBJECT_10((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5)),(k6),jv_null()))
    #define JV_OBJECT_12(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6) \
        (jv_object_set(JV_OBJECT_10((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5)),(k6),(v6)))
    #define JV_OBJECT_13(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7) \
        (jv_object_set(JV_OBJECT_12((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6)),(k7),jv_null()))
    #define JV_OBJECT_14(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7,v7) \
        (jv_object_set(JV_OBJECT_12((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6)),(k7),(v7)))
    #define JV_OBJECT_15(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7,v7,k8) \
        (jv_object_set(JV_OBJECT_14((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6),(k7),(v7)),(k8),jv_null()))
    #define JV_OBJECT_16(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7,v7,k8,v8) \
        (jv_object_set(JV_OBJECT_14((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6),(k7),(v7)),(k8),(v8)))
    #define JV_OBJECT_17(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7,v7,k8,v8,k9) \
        (jv_object_set(JV_OBJECT_16((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6),(k7),(v7),(k8),(v8)),(k9),jv_null()))
    #define JV_OBJECT_18(k1,v1,k2,v2,k3,v3,k4,v4,k5,v5,k6,v6,k7,v7,k8,v8,k9,v9) \
        (jv_object_set(JV_OBJECT_16((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6),(k7),(v7),(k8),(v8)),(k9),(v9)))
    #define JV_OBJECT_IDX(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,NAME,...) NAME
    #define JV_OBJECT(...) \
      JV_OBJECT_IDX(__VA_ARGS__, \
                    JV_OBJECT_18, JV_OBJECT_17, JV_OBJECT_16, JV_OBJECT_15, \
                    JV_OBJECT_14, JV_OBJECT_13, JV_OBJECT_12, JV_OBJECT_11, \
                    JV_OBJECT_10, JV_OBJECT_9, JV_OBJECT_8, JV_OBJECT_7,    \
                    JV_OBJECT_6, JV_OBJECT_5, JV_OBJECT_4, JV_OBJECT_3,     \
                    JV_OBJECT_2, JV_OBJECT_1)(__VA_ARGS__)

    Какой макробагор!

    Запостил: j123123, 05 Марта 2019

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

    • Напоминает исходники «J» или «Perl».
      Ответить
    • Зачем для парсинга json понадобилась такая поебень?
      Ответить
      • Да там целый небольшой язычок программирования: https://jqplay.org/#
        Ответить
    • самое главное-то забыли
      (jv_object_set(JV_OBJECT_17((k1),(v1),(k2),(v2),(k3),(v3),(k4),(v4),(k5),(v5),(k6),(v6),(k7),(v7),(k8),(v8)),(k9),(v9), (k10), (v10)))
      Ответить
    • ахахаха
      https://github.com/stedolan/jq/commit/ec583deefab97b8bce1883ae263fce9b91df38c6
      Ответить
    • Петушки, подскажите, можно ли попросить какой-нибудь ГуйЦаЦе хранить глобальную пельменную в каком-то определённом регистре?
      Ответить
      • register int x asm("r12");

        Как-то так если верить доке. Сам не пробовал.
        Ответить
        • О, спасибо, теперь я могу работать с укахателем стека как с обычной переменной, только вот пушки и попки всё равно через асмовставки делать придётся, гцц таке не умеет оптимизировать.
          Ответить
        • А если я заюзаю аккумулятор, он после вызова функций зашкварится? Его надо руками сохранять?
          Ответить
        • О прикольно, в сишке (стандарте) register все еще не выкинули на мороз
          Ответить
        • Ну его нахуй на "Си" такую хуйню писать. Переносимость получается не выше чем у ассемблера, да ещё и добавляется дополнительной ебли с подглядыванием в дизасм и подбором вореантов чтобы там мне никто не насрал в стек или в мою пельменную.
          Ответить
    • На днях видел похожее в исходниках boost'а, по-моему в boost::signals2 (могу ошибаться). Там они вручную специализировали сигнатуры для методов с разных набором аргументов -- что-то вроде от 0 до 20. Видимо, писалось для pre-C++11. Сейчас это проще с variadic templates.

      Также напоминает C#/CLR. Там они вручную прописали типы Tuple<T1>, Tuple<T1, T2>, Tuple<T1, T2, T3> и так далее до 8. То же самое с Func<>
      Ответить
      • В C# такое только вручную и пишут, там же нету шаблонов в отличие от С++.
        Почему шаблоны есть в С++, но их нет в C#?

        Дело в том что во-первых интеллект программистов на C# не так высок, как у программистов на С++, и потому они просто не способны изучить такие сложные инструменты.

        Во-вторых время их не так дорого, как время С++ программистов, и потому не будет ничего страшного если они вручную напишут много одинакового кода. В конце концов писание несложного бойлерплейта -- основная деятельтность программистов на C#, Java, PHP, JavaScript итд
        Ответить

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