Reputation: 120021
I have a macro like this:
#define SHOW_EXPR(x) printf ("%s=%d\n", #x, (x))
It works:
#define FOO 123
int BAR = 456;
SHOW_EXPR(FOO+BAR);
This prints FOO+BAR=579
as expected.
Now I'm trying to define a macro that calls SHOW_EXPR:
#define MY_SHOW_EXPR(x) (printf ("Look ma, "), SHOW_EXPR(x))
MY_SHOW_EXPR(FOO+BAR)
This prints Look ma, 123+BAR=579
, which is also expected, but this is not what I want.
Is it possible to define MY_SHOW_EXPR such that it does the right thing?
(Actual macros are a bit more complicated than shown here. I know that macros are evil.)
Upvotes: 4
Views: 752
Reputation: 78943
Macros are like kitchen knifes, you can do evil things with them but they are not evil as such.
I'd do something like this
#define SHOW_EXPR_(STR, EXP) printf (STR "=%d\n", EXP)
#define SHOW_EXPR(...) SHOW_EXPR_(#__VA_ARGS__, (__VA_ARGS__))
#define MY_SHOW_EXPR(...) SHOW_EXPR_("Look ma, " #__VA_ARGS__, (__VA_ARGS__))
which as an extra feature even would work if the expression contains a comma.
Upvotes: 3