我实际上是在编写 printf
的实现。我想要它,这样你就可以在字符串中传递许多字符串,例如:
kprintf("Hello %s", "Goodbye %s", "Farewell\n");
不要问为什么,这很可能是疯了。无论如何,它在查找它传递的字符串中有多少个 % 字符后递归调用自己;所以如果其中超过 1%,它应该传递很多参数。但是,我一直无法优雅地实现这一目标,请参见下面的内容:
case 1:
kprintf(str, argus[0]);
break;
case 2:
kprintf(str, argus[0], argus[1]);
break;
case 3:
kprintf(str, argus[0], argus[1], argus[2]);
break;
case 4:
kprintf(str, argus[0], argus[1], argus[2], argus[3]);
break;
case 5:
kprintf(str, argus[0], argus[1], argus[2], argus[3], argus[4]);
break;
以argus
作为指针数组。这行得通,但我讨厌它。有没有办法将可变参数传递给函数?
最佳答案
有一种类型可以完成您的工作。它被称为“va_list”,您可以为其提供参数(我猜最多 4096 个)。要使用它,请包含 starg.h
-header,您需要在函数声明中使用省略号 ...
。
int kprintf(int count, ...){
va_list vl;
va_start(vl,count);
for (i=0;i<n;i++)
{
val=va_arg(vl,double);
printf (" [%.2f]",val);
}
va_end(vl);
}
参见 here举个例子。
关于C - 传递变量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14978415/