C-与va_list不同类型的参数



我正在尝试编写一个宏,该宏通过将orginal va_list分配到字符串中,并将该信息发送到另一个函数,而另一个从原始的va_list则产生了另一个va_list。

以下是我的代码。

呼叫宏

/* Usage */
PRINT_LOG("Format log = %d, %f, %s", 1, 2.7, "Test");

我的代码下方

/* my includes here */
#include <stdarg.h>
void printInfo(int level, const char *debugInfo, ...); /* defined in 3rd party API */
void formatLogs(int level, ...);
#define PRINT_LOG(...) formatLogs(0, __VA_ARGS__)
void formatLogs(int level, ...)
{
  va_list args;
  va_start(args, level);
  /* get the first argument from va_list */
  const char *debugString = va_arg(args, const char*);
  /* here I want to get the rest of the variable args received from PRINT_LOG*/
  va_list restOfArgs = ???????; /* restOfArgs should be 1, 2.7, "Test" */
  /* Below I want to send the rest of the arguments */
  printInfo(level, debugString, args);
  va_end(args);
}

是否可以将va_list的某个部分作为va_list发送到另一个函数?如果是这样,我该怎么做?

非常感谢您。

根据问题中的代码,最简单的事情是重新定义宏:

#define PRINT_LOG(s, ...) printInfo(0, s, __VA_ARGS__)

,只需完全跳过中间功能即可。因为您想做的事情不能那样做。

, ...)变量参数椭圆是不是 a va_list。传递给函数的变量参数直到调用va_start之前才实现为va_list。要将va_list作为函数参数传递,该函数必须在其签名中具有va_list,例如:

int vprintf(const char *format, va_list argList);

相关内容

  • 没有找到相关文章

最新更新