c++ - 用于将 token 的整数映射到字符串的宏

标签 c++ macros

我需要一个宏 TAG(N,C),它接受参数 NC 生成 TAG_ + f 形式的标记(N) + g(C),其中 f(1) = Af(2) = ABf(3) = ABC >,f(4) = ABCDg(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/

相关文章:

macros - 编译时如何在宏之间进行选择?

c - 生成函数和全局变量

c++ - 宏 INT_MAX 在哪里定义的?

c++ - 如何在 Cygwin 中使用 OpenGL 和 GLUT

c++ - 使用 getline() 读取单引号

c++ - 即使在编译时不知道值,模运算是否更快?

c - 理解 linux 内核中的类型检查

c++ - std::array 的大小是否由标准定义

c++ - 在 hdf5 中使用 std::string 会产生不可读的输出

c - 打印所有定义的宏