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