| /* This works. */ | |
| #define foo(a) (a) | |
| #define bar two,words | |
| foo(bar) | |
| /* So does this. */ | |
| #define foo2(a,b) (a separate b) | |
| #define foo2_wrap(a) foo2(a) | |
| foo2_wrap(bar) | |
| /* But this generates an error. */ | |
| #define foo_wrap(a) foo(a) | |
| foo_wrap(bar) | |
| /* Adding parentheses to foo_wrap fixes it. */ | |
| #define foo_wrap_parens(a) foo((a)) | |
| foo_wrap_parens(bar) | |
| /* As does adding parentheses to bar */ | |
| #define bar_parens (two,words) | |
| foo_wrap(bar_parens) | |
| foo_wrap_parens(bar_parens) | |