c++ - 从具有可变参数数量的函数调用具有可变参数数量的函数

标签 c++ c variadic-functions

<分区>

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),它将只能从该点开始检索参数。

关于c++ - 从具有可变参数数量的函数调用具有可变参数数量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057860/

相关文章:

php - C & MySql 或 PHP & MySql 哪个更快?

java - 来自数组的 EnumSet,最短的变体?

python - 如何在 boost python 中公开采用可变参数的 C++ 函数

c++ - 函数声明的返回类型中的 & 符号如何工作?

C++ const-ness,Boost 无序映射,operator[]

c - 错误 : incompatible types when assigning to type ‘struct XXX’ from type ‘char **’

具有默认值的 C++ 可变参数模板函数参数

其他人使用的单独文件中的 C++ 命名空间

c++ - 讨论了哪些 boost 库包含在 C++17 中?

c - 为什么我的程序输出整数而不是 float ?