关于网友提出的“ 关于可变参数宏”问题疑问,本网通过在网上对“ 关于可变参数宏”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于可变参数宏
描述: 可变参数宏能不能这么搞:
#define FUCK(...) xxxxxxxxxxx
FUCK(a) ------> f(a)
FUCK(a,b) ------> f(a),f(b)
FUCK(a,b,c) ------> f(a),f(b),f(c)
......
解决方案1: 我还真用过可变参数的宏, 不用用法和你的不一样, 我是这样用的:
#define msg_scanf(fmt, ...) msg.__scanf(fmt "%n", __VA_ARGS__ , &msg.m_byteReaded)
你的那个其实也可以实现:
#include
#include
#define FUCK(...) _fuck(-1, __VA_ARGS__, -1)
void fuck(int x) { printf("%d\n", x); }
void _fuck(int start, ...)
{
va_list arglist;
va_start(arglist, start);
int v = va_arg(arglist, int);
while(v != -1)
{
fuck(v);
v = va_arg(arglist, int);
}
}
int main()
{
FUCK(1, 2, 3);
FUCK(8, 9, 10, 11);
}
解决方案2: 宏的展开逻辑导致这东西没办法真正意义上循环。还是用变参模板吧。
解决方案3: 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。
以上介绍了“ 关于可变参数宏”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3709360.html