Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从参数数目可变的函数调用参数数目可变的函数_C++_C_Variadic Functions - Fatal编程技术网

C++ 从参数数目可变的函数调用参数数目可变的函数

C++ 从参数数目可变的函数调用参数数目可变的函数,c++,c,variadic-functions,C++,C,Variadic Functions,可能重复: 假设我有一个函数mySuperDuperPrintFunction,它接受可变数量的参数。此函数调用printf(或具有可变参数数的任何其他函数)。我是否可以以某种方式将arglist中的所有参数或仅部分参数传递给其他函数 void mySuperDuperPrintFunction(char* text, ...) { /* * Do some cool stuff with the arglist. */ // Call printf w

可能重复:


假设我有一个函数
mySuperDuperPrintFunction
,它接受可变数量的参数。此函数调用
printf
(或具有可变参数数的任何其他函数)。我是否可以以某种方式将arglist中的所有参数或仅部分参数传递给其他函数

void mySuperDuperPrintFunction(char* text, ...) {

    /*
     * Do some cool stuff with the arglist.
     */

    // Call printf with arguments from the arglist
    printf(text, *someWayToExtractTheArglist());
}
是的:

您可以找到有关
vprintf
的信息(或查看手册页)

我对包装函数(如
write
(Unix)和(Windows))也做了类似的工作,这样我就可以创建一个格式化字符串,通过
vsnprintf
传递给它们

EDIT:我误解了你的问题。不,你不能,至少在C语言中不能。如果你想传递可变数量的参数,你调用的函数必须采用
va_list
参数,就像
vprintf
一样。你不能将
va_list
传递到
printf之类的函数上(const char*fmt,
..
包含有关该主题的更多信息


如果函数确实采用
va_列表
参数,则可以从特定点传递参数(即,可以跳过第一个)。使用
va_arg
检索参数将更新
va_列表
指针,指向下一个参数,然后将
va_列表
传递给函数(例如,代码> VPROTFF < /C>),它只能从该点检索参数。

你应该看调用<代码> vPrimtf。这是C++还是C++?答案可能是“不”。在C语言中,你基本上会看到
va_arg
解包魔法的一些相反的东西。我不确定标准是否提供了一个。为什么这是重复的?OP询问是否以及如何修改valist,这与传递valist不同。“或者任何其他具有可变参数数的函数”-
vprintf
不一样,我需要调用实际接受可变数量参数的函数。Thanks@NiklasR哦,我假设你想要一个像
vprintf
这样的函数。我认为这是不可能的(至少在C语言中是这样),除非参数是
va_列表
,比如
vprintf
。@NiklasR更新了我关于您关于“…或仅一些”的问题的答案。尽管如此,它仍然只与使用
va_列表
有关。
va_list args;
va_start(args, text);

vprintf(format_goes_here, args);