我需要一个宏 TAG(N,C)
,它接受参数 N
和 C
生成 TAG_ + f 形式的标记(N) + g(C),其中 f(1) = A
,f(2) = AB
,f(3) = ABC
>,f(4) = ABCD
和 g(0) =(空字符串)
,g(1) = _FOO
, g(2) = _BAR
。
例子:
TAG(3,0) -> TAG_ABC
TAG(2,1) -> TAG_AB_FOO
TAG(4,2) -> TAG_ABCD_BAR
执行此操作的最佳方法是什么?
最佳答案
您可以使用以下内容:
#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))
关于c++ - 用于将 token 的整数映射到字符串的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23031541/