使用具有可变数量参数的函数调用具有可变数量参数的函数

时间:2011-11-08 22:17:14

标签: c++ c variadic-functions

  

可能重复:
  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());
}

1 个答案:

答案 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)时,它将仅能够从该点检索参数。