Is it possible to have a macro expanded only once? In the following example, MYCONCAT
is expanded to func_1(10)
. I want it to expand to func_BAR(10)
.
#define BAR 1 // included from a file I cannot change
#define FOO BAR
#define MYCONCAT2(c) func_ ## c
#define MYCONCAT(c, x) MYCONCAT2(c)(x)
MYCONCAT(FOO, 10) // is 'func_1(10)', but I want it to be 'func_BAR(10)'
CodePudding user response:
Is it possible to have a macro expanded only once?
No, it is not possible to partially expand a macro.
CodePudding user response:
Include the file that defines BAR
only after the last place where MYCONCAT
is used (with something that expands to BAR
) instead of before it.
CodePudding user response:
Simply change #define BAR
to #define _BAR
and and remove the _
from func
.
#define BAR 1 // included from a file I cannot change
#define FOO _BAR
#define MYCONCAT2(c) func ## c
#define MYCONCAT(c, x) MYCONCAT2(c)(x)
MYCONCAT(FOO, 10) // 'func_BAR(10)'