传递varargs函数的参数

时间:2017-02-16 08:57:07

标签: c

说我想实现一个功能

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   printf(format, ...);
}

即。我想将varargs列表传递给printf。有没有方便的方法呢?

2 个答案:

答案 0 :(得分:3)

没有。但是,printf系列中的库函数提供vprintf varaint,它接受​​va_list作为参数而不是省略号。事实上,如果您正在编写自己的变量参数函数,那么提供这样的变体实际上是一种很好的做法。

你的包装器会是这样的:

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   va_list args;
   va_start(args, format);
   vprintf(format, args);
   va_end(args);
}

答案 1 :(得分:2)

在预处理器的帮助下:

#include <stdio.h>

#define myprintf(...) \
do { \
   printf("Hello world!\n"), \
   printf(__VA_ARGS__); \
} while (0)

int main(void)
{    
    myprintf("%s %d\n", "Hello", 1);
    return 0;
}