gpt4 book ai didi

c - 传递 __VA_ARGS__ 时第一个参数是错误的

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:52 31 4
gpt4 key购买 nike

我正在尝试将 __ 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com