1/* This works. */ 2#define foo(a) (a) 3#define bar two,words 4foo(bar) 5 6/* So does this. */ 7#define foo2(a,b) (a separate b) 8#define foo2_wrap(a) foo2(a) 9foo2_wrap(bar) 10 11/* But this generates an error. */ 12#define foo_wrap(a) foo(a) 13foo_wrap(bar) 14 15/* Adding parentheses to foo_wrap fixes it. */ 16#define foo_wrap_parens(a) foo((a)) 17foo_wrap_parens(bar) 18 19/* As does adding parentheses to bar */ 20#define bar_parens (two,words) 21foo_wrap(bar_parens) 22foo_wrap_parens(bar_parens) 23 24 25