无办法直接做到这一点,不过可以采用其他方法实现,例如:首先,定义被调用函数的参数为va_list类型,同时在调用函数中将可变长参数列表转换为va_list,这样就可以进行变长参数的传递了。看如下所示:
void subfunc (char *fmt, va_list argp)
{
...
arg = va_arg (fmt, argp); /* 从argp中逐一取出所要的参数 */
...
}
void mainfunc (char *fmt, ...)
{
va_list argp;
va_start (argp, fmt); /* 将可变长参数转换为va_list */
subfunc (fmt, argp); /* 将va_list传递给子函数 */
va_end (argp);
...
}
这样就OK了!
通常来说, 做不到。理想情况下, 应该提供另一个版本的函数, 这个函数接受 va list 指针类型的参数。类似于 vfprintf(),如果所有的参数必须完整的传给另一个函数, 或者不能重写另一个函数为一个接受 va list 指针类型参数的函数, 这并没有一个可移植的解决方法。也许可以通过求助于机器的汇编语言来实现。
通常来说, 做不到。
理想情况下, 应该提供另一个版本的函数, 这个函数接受 va list 指针类型的参数。类似于 vfprintf(),如果所有的参数必须完整的传给另一个函数, 或者不能重写另一个函数为一个接受 va list 指针类型参数的函数, 这并没有一个可移植的解决方法。也许可以通过求助于机器的汇编语言来实现。
有很多中方法实现啊 直接调用就行了 可变参数的底层是一个数组 你可以用集合或数组来存储这些参数的值啊