我正在尝试将 __ VA_ARGS __ 传递给一个函数。由于某种原因,第一个参数总是错误的(看起来像一个地址):
#define PRINTF_ERROR(format, ...) {\
PrintfError(format, __FUNCTION__, ##__VA_ARGS__);\
}
void PrintfError(const char* format, const char* function, ...)
{
va_list args;
va_start(args, format);
printf("%s(): ", function);
printf(format, args);
va_end(args);
}
例如,当尝试打印相同的变量时: “A = 0x20005524 A = 0x00000007”
有人知道为什么吗? 谢谢
最佳答案
这里有两个问题。
首先,va_start
期望当前函数的最后一个命名参数作为它的第二个参数。在这种情况下,这将是 function
。
第二个问题是您将 va_list
传递给 printf
。您应该改为调用 vprintf
。
void PrintfError(const char* format, const char* function, ...)
{
va_list args;
va_start(args, function); // pass "function" instead of "format"
printf("%s(): ", function);
vprintf(format, args); // call vprintf
va_end(args);
}
关于c - 传递 __VA_ARGS__ 时第一个参数是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737917/