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

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

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

  • > #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? Хоть и обявления не только в начале блока почти везде поддерживаются, но просто интересно.
      Ответить
  • Российские космонавты больше не смогут мочиться на колесо автобуса перед вылетом в космос. Традиция, известная еще со времен Гагарина, прервется из-за отсутствия ширинки на новых спасательных скафандрах "Сокол-М".
    Ответить
  • Бля, я так и думал, что Майкл джексон кодит на сях.
    Ответить
  • Вот так лучше:
    #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))
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8