C - 传递变量参数

标签 c variadic-functions

我实际上是在编写 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/

相关文章:

C 扩展在 Python 3.7 中不起作用说 ImportError : dynamic module does not define module export function (PyInit_loop)

c - 为什么我的 C 程序在不同的编译器中给出不同的输出?

scala - 将变长参数传递给期望相同的另一个函数?

java - 我无法从 JSP 页面调用带有 varargs 的方法

java - 为什么重载方法的类型提升优先于可变参数

c - 如何将可变参数函数转换为宏?

从 c 调用汇编函数导致段错误

将时间常数编译为 float

c - glibc 检测到 realloc() : invalid next size: 0x

objective-c - 如何覆盖 Objective-C 中的可变参数方法