gpt4 book ai didi

c++ - 如何编写将文本附加到部分函数名称以创建完整函数名称的宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:31 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何编写一个 C 预处理器宏,它可以接受部分函数名称和一段要附加到函数名称的文本以及一组参数来创建实际的函数名称和函数调用.这个想法是结合前两个宏参数来创建一个函数名,然后将其余的宏参数添加为创建的函数名的参数。

所以我想达到以下目的:

MACRO(foo, postfix, ...)
----> foo_postfix(__VA_ARGS__)

例如,如果我有几个 C 函数,func_test1()func_test2()func_test3() 那么我希望能够使用宏将 func 指定为第一个参数,将 test1 指定为第二个参数,以便宏将创建函数名称 func_test1(),或者将 func 指定为第一个参数,将 test2 指定为第二个参数,这样宏将创建一个名为 func_test2 的函数。

或者类似的东西

#define MACRO(foo,postfix,...)  "macro to combine foo and postfix into actual function name"

然后我可以像这样使用这个宏

MACRO(func, test1, a, b, c);  // will create func_test1(a, b, c);
MACRO(func, test2, i, x); // will create func_test2(i, x);

似乎没有一种直接的方法可以做到这一点。

最佳答案

您可以在宏中使用## 将两个参数连接成字符串。所以如果你的宏是

MACRO(foo, postfix, ...)

你可以这样定义它

MACRO(foo, postfix, ...) foo##_##postfix(__VA_ARGS__)
^^^ adds an underscore in the middle. Don't include if you
don't want the underscore.

连接 foopostfix 并在它们之间添加下划线。

在这些类型的宏中使用作为宏的参数时要小心。粘贴参数时不进行宏扩展,因此 MACRO(foo, MYMACRO, ~) 将扩展为 foo_MYMACRO() 而不是 MYMACRO.

关于c++ - 如何编写将文本附加到部分函数名称以创建完整函数名称的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com