想象一下,我有一个函数mySuperDuperPrintFunction
,它接受可变数量的参数。这个函数调用printf
(或任何其他具有可变数量参数的函数。我能以某种方式将所有或仅一些参数从 arglist 传递给其他功能?喜欢
void mySuperDuperPrintFunction(char* text, ...) {
/*
* Do some cool stuff with the arglist.
*/
// Call printf with arguments from the arglist
printf(text, *someWayToExtractTheArglist());
}
答案 0 :(得分:2)
是:
va_list args;
va_start(args, text);
vprintf(format_goes_here, args);
您可以找到有关vprintf
here的信息(或查看您的手册页)。
我为write
(Unix)和OutputDebugString
(Windows)这样的包装函数做了类似的操作,这样我就可以创建一个格式化的字符串,并通过vsnprintf
传递给它们。 / p>
编辑:我误解了你的问题。不,你不能,至少不在C中。如果你想传递可变数量的参数,你正在调用的函数必须采用va_list
参数,就像vprintf
一样。您无法将va_list
传递给printf(const char *fmt,
...
)
等功能。 This link包含有关该主题的更多信息。
如果函数 采用va_list
参数,那么可以从特定点传递参数(即你可以跳过第一个参数) 。使用va_arg
检索参数将更新va_list
指向下一个参数的指针,然后当您将va_list
传递给函数(例如vprintf
)时,它将仅能够从该点检索参数。