71 lines · 1.3 KB · Text
RawDownload
#define NOP(x) x#define CAT(a, b) a ## b#define EOF	(-1) -- test nop --x NOP(CAT(foo, EOF)) yx NOP(CAT(EOF, foo)) yx CAT(, EOF) yy CAT(foo,) xx CAT(,foo) yX NOP(CAT(,)) y -- test ncat --#define NCAT(a)	foo ## aNCAT(bar) -- test xcat (no left arg) --#define XCAT(a)	## afoo XCAT(bar) -- test cat3 --#define CAT3(foo)	a##foo##bCAT3(blah) -- test expand and cat --#define BAR	3#define FOO	CAT(BAR, 3)FOO -- test expand and cat 2 --/* Expected: a bc d */CAT(a b, c d)WUT -- test varargs --#define xprint(a, ...)	print(a, __VA_ARGS__)xprint("hi", "there")xprint("hi") -- test expanding commas --#define C	a,b#define X(a)	a#define Y	X(C)Y #define    x          3#define    f(a)       f(x * (a))#undef     x#define    x          2#define    g          f#define    z          z[0]#define    h          g(~#define    m(a)       a(w)#define    w          0,1#define    t(a)       a#define    p()        int#define    q(x)       x#define    r(x,y)     x ## y#define    str(x)     # x-- test complex expressions --f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);g(x+(3,4)-w) | h 5) & m(f)^m(m); -- test empty args --#define ZARGS(a) a b aZARGS() -- test complex expressions with empty args --p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };char c[2][6] = { str(hello), str() };