Possible Duplicate:
C/C++: Passing variable number of arguments around
假设我有一个函数 mySuperDuperPrintFunction
,它接受可变数量的参数。此函数调用 printf
(或具有可变数量参数的任何其他函数。我能否以某种方式传递所有,或仅传递 arglist 到其他功能?喜欢
void mySuperDuperPrintFunction(char* text, ...) {
/*
* Do some cool stuff with the arglist.
*/
// Call printf with arguments from the arglist
printf(text, *someWayToExtractTheArglist());
}
是的:
va_list args;
va_start(args, text);
vprintf(format_goes_here, args);
您可以找到有关 vprintf
的信息 here (或查看您的手册页)。
我已经为包装函数做了类似的事情,例如 write
(Unix) 和 OutputDebugString
(Windows) 这样我就可以创建一个带格式的字符串以使用 vsnprintf
传递给他们。
编辑:我误解了你的问题。不,你不能,至少在 C 中不能。如果你想传递可变数量的参数,你调用的函数必须采用 va_list
参数,就像 vprintf
确实如此。您不能将 va_list
传递给函数,例如 printf(const char *fmt,
...
)
。 This link包含有关该主题的更多信息。
如果函数确实采用va_list
参数,那么您可以从特定点传递参数(即您可以跳过第一)。使用 va_arg
检索参数会将 va_list
指针更新为下一个参数,然后当您将 va_list
传递给函数时(例如 vprintf
),它将只能从该点开始检索参数。