- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 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)
Какой UB )))
За такие макросы убивать надо нахуй.
А писать
Кстати, можно ли как-нибудь переписать DCELL, чтобы соответствовало C89? Хоть и обявления не только в начале блока почти везде поддерживаются, но просто интересно.