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

    +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
    /*
    https://habr.com/ru/post/523688/
    
    Так как мы работаем с макросистемой C/C++, то аналог функций — макрос, этой
    абстракцией мы и будем пользоваться. Мы будем передавать идентификатор первого
    рекурсивного макроса в следующий рекурсивный макрос, и тот, в свою очередь, по
    мере завершения своего исполнения будет передавать поток исполнения в первый
    рекурсивный макрос, так называемое продолжение. Нам также понадобиться терминальное
    продолжение — ML99_PRIV_REC_STOP — оно будет являться продолжением, поставляющимся
    в самый-самый первый рекурсивный макрос, ведь логично, что никуда, кроме как
    закончить исполнение программы на данном месте, нам перепрыгивать не нужно. Жилка
    двигателя рекурсии — это цепочка из макросов-раскрывателей следующего вида:
    */
    
    #define ML99_PRIV_REC_0(choice, ...)    ML99_PRIV_REC_NEXT(1, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_1(choice, ...)    ML99_PRIV_REC_NEXT(2, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_2(choice, ...)    ML99_PRIV_REC_NEXT(3, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_3(choice, ...)    ML99_PRIV_REC_NEXT(4, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_4(choice, ...)    ML99_PRIV_REC_NEXT(5, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_5(choice, ...)    ML99_PRIV_REC_NEXT(6, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_6(choice, ...)    ML99_PRIV_REC_NEXT(7, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_7(choice, ...)    ML99_PRIV_REC_NEXT(8, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_8(choice, ...)    ML99_PRIV_REC_NEXT(9, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_9(choice, ...)    ML99_PRIV_REC_NEXT(10, choice)(__VA_ARGS__)
    //...
    
    
    //И так до 1023:

    Интересно, этот чувак сидит на говнокоде?

    Запостил: j123123, 03 Июля 2021

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

    • Надо бы показать ему какой-нибудь LISP, чтобы он перестал херней маяться
      Ответить
    • ML99_PRIV_REC_EXPAND( \
              ML99_PRIV_REC_NEXT(0, choice)(__VA_ARGS__) \
          ))))))))))))))))


      какой ))))))))))))))))
      Ответить
    • Я думаю нет, иначе он бы подсмотрел приёмы из boost pp. Там всё-таки не копипастили тыщу шагов, а лупы очень долго могут работать.
      Ответить
      • З.Ы. А, судя по первой статье чел смотрел их, но хотел именно рекурсию... Ну х.з., ФВП тоже неплохо практические задачки решают, даже если труъ рекурсия недоступна.
        Ответить
    • Какое переписывание термов (≧◡≦).
      Ответить
    • бля в рот его выебу
      Ответить
    • простите а где тут рекурсия?
      Ответить
      • Поскольку нормальная рекурсия в сишном препроцессоре невозможна (макрос не может раскрыть себя же), тут сделана кривая имитация этой рекурсии, через накопипащивания хуйни много раз.
        Ответить

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