C编程:转发variables参数列表

我试图写一个函数接受像printf可变数量的参数,做一些东西,然后将variables列表传递给printf。 我不知道如何做到这一点,因为它似乎将它们推到堆栈上。

大概是这样的

http://pastie.org/694844

#include <stdio.h> #include <stdarg.h> void forward_args( const char *format , ... ){ va_list arglist; printf( format, arglist ); } int main (int argc, char const *argv[]){ forward_args( "%s %s\n" , "hello" , "world" ); return 0; } 

有任何想法吗?

不要将结果传递给printf 。 将它们传递给vprintfvprintf专门用于处理va_list参数的传递。 从Linux手册页:

 #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...); #include <stdarg.h> int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *str, const char *format, va_list ap); int vsnprintf(char *str, size_t size, const char *format, va_list ap); 

请注意,后者是如何明确地采用va_list参数,例如在参数列表中的函数内部声明的参数。 所以你的函数会这样声明:

 void forward_args( const char *format , ... ){ va_list arglist; va_start( arglist, format ); vprintf( format, arglist ); va_end( arglist ); } 

我很确定你正在寻找va_start() / vprintf() / vsnprintf() / va_end() ,你不需要自己实现这些。

你会沿着arglist的值传递一个函数来消耗它。 请参阅stdarg和vprintf文档以获取更多线索。

我不是(不在我头顶)熟悉如何实现这一点。 我会build议看看像printffunction的实现。 存在几个开源实现。 glibc,uclibc(不知道什么bsd和opensolaris调用/使用他们的libc)。