将可变参数列表提供给 C 中的被调用函数

Give variable parameter list to a called function in C

我有一个带有类似 printf 的变量参数列表的函数,我调用它的示例是:

debugMsg(__FILE__, __LINE__, "failed with var %s = %d\n", var, val);

现在我需要一个包装函数,例如:

void debugMsgWrapper(const char* FileName, int LineNo, const char* FmtStr, ...)
{
    // do some other things
    DebugMsg(FileName, LineNo, FmtStr, ...);
}

当然,这不适用于指定为 ... 的参数列表,但我不知道如何将参数列表复制到被调用函数。我看过
void va_copy(va_list dest, va_list src);
但找不到如何使用它。

如何将可变参数列表传递给被调用函数?

您需要重写 debugMsg 以便它采用 va_list 而不是可变数量的参数。以下是您的操作方式:

void
debugMsg(const char *FileName, int LineNo, const char *FmtStr, va_list args);

void
debugMsgWrapper(const char *FileName, int LineNo, const char *FmtStr, ...)
{
    va_list args;

    // do some other things
    va_start(args, FmtStr); // Make args start after FmtStr;
    debugMsg(FileName, LineNo, FmtStr, args);
    va_end(args);
}

然后,您可以在 debugMsg 中通过 va_arg:

重复从 args 中提取参数
int n;
const char *string;

n = va_arg(args, int);
string = va_args(args, char*);