好吧,这听起来很奇怪,标题有点混乱,但我的意思基本上是:
#define make_name(id) cool_name_##id
#define my_cool_macro(id, type) void fun_##make_name(id)(type arg1)
my_cool_macro(hello, char);
这方面应扩大到
/*
* passed through my_cool_macro
* vvvvv
*/
void fun_cool_name_hello(char arg1);
/* ~~~~^^^^^^^^^^^^^^^ */
- 一月一日-一月一日
- x1米2米1x--x1米3米1x
我没有更好的方法来解释这件事,有没有办法让这件事成功?
基本上:
- 定义一个类似函数的宏,它可以生成名称
- 定义另一个类似于函数的宏,该宏使用传递给函数创建者宏的参数调用定义的名称创建宏
我为什么要这么做
我有点想用宏在c中实现templaces,正如你所知道的,模板函数可以有不同的类型,我想修改名称,但不重复cool_name_...
,因为如果我想将cool_name
更改为some_name
该怎么办
该解决方案工作方式也应该与我的示例类似,因此fun_##make_name(hello)
应该与hello_##make_name(hello)
和ewuihewuifh_##make_name(hello)
一样工作,而不需要为每个更改定义宏
2条答案
按热度按时间ovfsdjhp1#
您可以:
如果你想让它处理任何类型或数量的参数,你可以使用省略号(
...
)和__VA_ARGS__
。输出:
https://godbolt.org/z/d67MWjasz
mrfwxfqh2#
您可以使用一个宏来创建原型及其类型,以及一个用于生成自定义名称的宏。