cat > a.c #define X(s) #s #define S(s) X(s) char *f(void) return { S(A); } ^D cc -E a.c char *f(void) return { "A"; } cc -DA=B -E a.c char *f(void) return { "B"; }
M(foo) M(bar)
void print_foo(void) { puts("foo"); } voir print_bar(void) { puts("bar"); }
Ah, the poor man's introspection and reflection with C macros.
shudder