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

    0

    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
    #define LOC(type, var) type var = (type) DPOP();
    #define CELL(var) LOC(const cell, var)
    #define UCELL(var) LOC(const ucell, var)
    #define ACELL(var) LOC(cell * const, var)
    #define ADCELL(var) LOC(dcell * const, var)
    #define ACHAR(var) LOC(char * const, var)
    #define STR(var) const string var = {(ucell)DPOP(), (character*)DPOP()}
    
    #define SWAP(a, b) (a ^= b ^= a ^= b)
    
    #if BYTEORDER == BYTEORDER_LE
        #define DCELL(var) dcell var = (*((dcell*) dsp)++)
        #define UDCELL(var) udcell var = (*((udcell*) dsp)++)
    #else
        #define DCELL(var) \
            SWAP(dsp[0], dsp[1]); \
            dcell var = (*((dcell*) dsp)++)
        #define UDCELL(var) \
            SWAP(dsp[0], dsp[1]); \
            udcell var = (*((udcell*) dsp)++)
    #endif
    
    #define BOOL(value) ((value) ? -1 : 0)
    
    #define DO(begin, end, stmt) do { \
        cell i = begin; \
        cell end_ = end; \
        for (; i < end_; ++i) { \
            stmt; \
        } \
    } while (0)

    Запостил: Pretty_Young_Thing, 31 Августа 2019

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

    • Переведи на «PHP».
      Ответить
    • Какая шиза )))
      Ответить
    • #define SWAP std::swap
      Ответить
    • > #define SWAP(a, b) (a ^= b ^= a ^= b)
      Какой UB )))

      За такие макросы убивать надо нахуй.
      Ответить
      • Хотя нет, убивать надо за «#define swap...». За «SWAP» только принудительно переводить на «PHP».
        Ответить
      • Да, это пожалуй лучше выкинуть. А остальное очень даже удобно, чтобы не писать
        PROC(p_two_swap) // ( x1 x2 x3 x4 -- x3 x4 x1 x2 )
        {
            cell x4 = DPOP(), x3 = DPOP(), x2 = DPOP(), x1 = DPOP();
            DPUSH(x3);
            DPUSH(x4);
            DPUSH(x1);
            DPUSH(x2);
            NEXT();
        }

        А писать
        PROC(p_two_swap) // ( x1 x2 x3 x4 -- x3 x4 x1 x2 )
        {
            CELL(x4); CELL(x3); CELL(x2); CELL(x1);
            DPUSH(x3);
            DPUSH(x4);
            DPUSH(x1);
            DPUSH(x2);
            NEXT();
        }


        Кстати, можно ли как-нибудь переписать DCELL, чтобы соответствовало C89? Хоть и обявления не только в начале блока почти везде поддерживаются, но просто интересно.
        Ответить
    • Российские космонавты больше не смогут мочиться на колесо автобуса перед вылетом в космос. Традиция, известная еще со времен Гагарина, прервется из-за отсутствия ширинки на новых спасательных скафандрах "Сокол-М".
      Ответить
      • Интересно что будет если расстегнуть её в открытом космосе.
        Ответить
        • Отморозишь хуй.
          Ответить
          • Проебёшь икону, потом на МКС МП оштрафуют на месячную получку.
            Ответить
          • Какой багор )))
            Ответить
          • Мне не совсем понятно как может быть температура у "нихуя".
            Ответить
        • Там же вроде разные скафадры бывают. Разве на скафандре для выхода в откыртый комсос есть ширинка?
          Ответить
          • Ну а вдруг посреди выхода поссать захочется? Не терпеть же.
            Ответить
          • Смех смехом, а у русни действительно EVA скафандров нет. Когда Вицину политбюро приказало вылазить наружу чтобы вперед Америки успеть, то ему скафандр раздуло и он чуть не уволился.
            Ответить
    • Бля, я так и думал, что Майкл джексон кодит на сях.
      Ответить
    • Вот так лучше:
      #if BYTEORDER == BYTEORDER_LE
          #define DCELL(var)  const dcell var = (*((dcell*) dsp)++)
          #define UDCELL(var) const udcell var = (*((udcell*) dsp)++)
      #else
          #define DCELL(var)  const dcell var = DCELL_FROM_PAIR(DPOP(), DPOP())
          #define UDCELL(var) const udcell var = DCELL_FROM_PAIR(DPOP(), DPOP())
      #endif
      
      #define DCELL_FROM_PAIR(high, low) (((high) << BIT_WIDTH) | (low))
      Ответить

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