see: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
macro.c:
#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
f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);
g(x+(3,4)-w) | h 5) m
given the following code, TCC can't expent it to correct result.
#define t_fwd_rnd(x) x
#define t_rnd(rm) t_fwd_rnd
#define round(rm, x) t_rnd(rm)(x);t_rnd(rm)(x);
void foo ()
{
int b0;
round(fwd_rnd, b0);
}
the correct result should be: b0; b0
but the TCC give the result of: b0 ;