我需要一个宏(或一个函数,但最好是一个宏),它接受函数名称和无限数量的参数,然后将参数传递给函数。假设这个宏是MACROFOO
.
#define MACROFOO(function, ...) /* what do I put here?? */
int foo_bar(int x, int y)
{
// do stuff
}
int main(void)
{
int x = 3;
int y = 5;
MACROFOO(foo_bar, x, y); // calls foo_bar(x, y)
}
我如何定义这样的宏?我想做一些类似的事情:
#define MACROFOO(function, args...) (function)(args)
但看起来已经过去了...
到函数,而不是实际参数。我应该怎么办?
您可以扩展...
可变参数宏的__VA_ARGS__
.
Example:
#define MACROFOO(function, ...) (function)(__VA_ARGS__)
MACROFOO(printf, "hello world%c", '!')
/*^ expands to: (printf)("hello world%c", '!') */
注意:正如您可能知道的,括号可以防止function
扩展为宏的参数(如果它是宏)。
I.e.,
#define BAR(...) myprintf(__VA_ARGS__)
MACROFOO(BAR, "hello world%c", '!')
将扩展到:
(BAR)("hello world%c", '!')
带括号和
myprintf("hello world%c", '!')
如果你删除它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)