windows va_list中的变量参数列表

时间:2010-05-07 04:13:00

标签: c++ c

我希望能够接受

的功能
foo(...)
{
    //......
}

这个用法是

foo(1,2,3);
foo(1)
foo(1,2,3,4,5,5,6);
可以使用

va_list,但我必须再次传递foo(int count, ...),因为在运行时我不知道我有多少参数。

任何指针都会受到赞赏

由于

3 个答案:

答案 0 :(得分:3)

你需要提供函数一些方法来确定它被调用的参数数量:或者是一个计数(或者可以确定计数的东西,例如printf的格式参数)或终结符(除了最后一个必须完全等于终结符之外,不允许任何参数等于终结符)。当函数的可变参数 完成时,该函数不能只知道“魔术”。

答案 1 :(得分:2)

C和C ++中的变量函数不是类型安全的。因此,如果没有某些机制来标记参数列表的结尾,则无法执行您想要的操作。您还需要至少有一个“固定”参数,以便宏可以知道参数列表的开头在内存中的位置。

这就是为什么将“count”作为第一个参数传递是有用的:它在一次击中中解决了这两个问题。

请注意,对于像printf这样的东西,它可以正常运行,因为格式字符串是固定参数,而变量参数的“count”隐含在格式字符串中。

答案 2 :(得分:1)

在C中运行时构建参数列表不是可能,因此绝对可以肯定您知道每次调用f()时在编译时使用了多少个参数。< / p>