我有一个函数,它接受可变数量的参数。从这个函数我想调用带有固定数量参数的函数,
void log(int level, const char* format, ...)
{
va_list args;
va_start(args, fmt);
int count = 0;
void *navigator[10] = NULL;
while ((navigator[count] = va_arg(args, char*) ) != NULL && count < 10)
++count; //Is this the right way to count no. of arguments passed ?
fprintf(stderr, "**** No of arguments : %d\n", count);
fflush(stderr);
switch (count - 2)
{
case 0:
log_l(level, fmt);
break;
case 1:
log_l1(level, fmt, navigator[0]); // how would I get arg1 here,
// I get NULL in the called function)*/
break;
.
.
.
.
.
};
}
我想知道计算传递的参数数量的正确方法,然后将它们正确地转发到其他固定参数函数。
答案 0 :(得分:1)
没有办法 - 您需要明确传递此信息,例如使用count参数或显式0作为最后一个参数。类型信息也不以任何形式传递。
答案 1 :(得分:1)
您的va_start
需要va_start(args, format); // Note change to "format"
。
编辑:即使根据va_arg
的联机帮助页,你也无法做到你想做的事。
如果没有实际的下一个参数, 或者iftype与实际的下一个类型不兼容 参数(根据默认参数pro-提升 行动),行为未定义。
但这是标记的C ++,所以为什么不使用C ++习语:使用流和插入operator<<
而不是使用varargs。