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

    +122

    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
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    #if defined(REG_R1) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R1,REG_R1)
    #else
    # define R1 (BaseReg->rR1)
    #endif
    
    #if defined(REG_R2) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R2,REG_R2)
    #else
    # define R2 (BaseReg->rR2)
    #endif
    
    #if defined(REG_R3) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R3,REG_R3)
    #else
    # define R3 (BaseReg->rR3)
    #endif
    
    #if defined(REG_R4) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R4,REG_R4)
    #else
    # define R4 (BaseReg->rR4)
    #endif
    
    #if defined(REG_R5) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R5,REG_R5)
    #else
    # define R5 (BaseReg->rR5)
    #endif
    
    #if defined(REG_R6) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R6,REG_R6)
    #else
    # define R6 (BaseReg->rR6)
    #endif
    
    #if defined(REG_R7) && !defined(NO_GLOBAL_REG_DECLS)
    GLOBAL_REG_DECL(StgUnion,R7,REG_R7)
    #else
    # define R7 (BaseReg->rR7)
    #endif
    
    ...

    Исходник GHC
    https://github.com/ghc/ghc/blob/master/includes/stg/Regs.h#L147

    Запостил: j123123, 27 Июля 2013

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

    • не смешно.

      учите системщину.

      альтернатива: не учите системщину (здоровее будете) НО и не смотрите в сырцы осей/компилеров/системных библиотек.
      Ответить
      • Нормальный макропроцессор (типа M4) или кодогенератор для такого надо использовать, а не делать копипаст на кучу строчек
        Ответить
        • а с чего ты взял что код не был сгенерирован? и зачем его постоянно генерировать если он меняется раз в пятилетку?

          ЗЫ и к слову, самый портабельный вариант, который работает так же и на платформах лишенных счастья м4, это писать кодогенерацию на том же языке что и проект: 100% гарантия что скомпилится и запустится.
          Ответить
          • Первое: Можно просмотреть историю коммитов. Очевидно, что если кто-либо вносил изменение в нагенерированный код, параллельно с этим всегда должны были бы быть внесены изменения в некий вполне конкретный генератор, отвечающий за генерацию этого кода. Я обнаружил, что таких изменений нет т.е. кодогенератор отсутствует.

            Второе: Если код нагенерированный, надо писать что-то вроде "Automatically generated by blablabla", такого там нет.
            Ответить
    • Боюсь, что это самый короткий способ записи. Препроцессор Си позволяет как-нибудь засунуть ифдефы в макрос, чтобы столько раз их не писать?
      Ответить

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