我需要一个宏TAG(N,C)
,它接受参数N
和C
生成一个TAG_ + f(N)+ g(C)形式的标记,其中{{1} },f(1) = A
,f(2) = AB
,f(3) = ABC
和f(4) = ABCD
,g(0) = (empty string)
,g(1) = _FOO
。
示例:
g(2) = _BAR
这样做的最佳方式是什么?
答案 0 :(得分:2)
您可以使用以下内容:
#define f_1 A
#define f_2 AB
#define f_3 ABC
#define f(N) f_##N
#define g_0 /* Empty */
#define g_1 _FOO
#define g_2 _BAR
#define g(N) g_##N
#define CONCAT3_(A, B, C) A ## B ## C
#define CONCAT3(A, B, C) CONCAT3_(A, B, C)
#define TAG(N, C) CONCAT3(TAG_, f(N), g(C))