C macro: concatenate symbols conditonally -
i have
#define a_t 1 #define b_t 2 int x_a = 1, x_b =2; how can define macro, can concatenate suffix _a , _b var name?
for example, #define a_t_suf _a #define b_t_suf _b #define suffix(t) t ## _suf #define var_suf(var, t) var ## suffix(t) ..... var_suf(x, a_t) ---> replaced x_a is possible?
you need indirection in var_suf macro force evaluate called macros before concatenating tokens instead of concatenating first:
#define a_t_suf _a #define b_t_suf _b #define suffix(t) t ## _suf #define cat(a, b) ## b #define xcat(a, b) cat(a, b) #define var_suf(var, t) xcat(var, suffix(t)) ..... var_suf(x, a_t) ---> replaced x_a without indirect, var_suf(x, a_t) expand xsuffix(a_t) (concatenate first, more macros). cat/xcat indirection, expand suffix(a_t) first , concatenate.
xcat short expand_and_concatenate, while cat concatenate (without expansion.)
edit
if a_t macro (eg, #define a_t 1) replaced first. can avoid removing indirection of ## in suffix macro:
#define a_t_suf _a #define b_t_suf _b #define cat(a, b) ## b #define xcat(a, b) cat(a, b) #define var_suf(var, t) xcat(var, t##_suf) ..... var_suf(x, a_t) ---> replaced x_a this cause concatenation happen first, macros expanded, other concatenation happen
if x macro, have problem, there's no way expand 1 token , not other before concatenate them.
Comments
Post a Comment