C 编程 : Forward variable argument list

标签 c variables arguments printf forward

我正在尝试编写一个接受可变数量参数的函数,例如 printf,执行一些操作,然后将变量列表传递给 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 );
}

关于C 编程 : Forward variable argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719784/

相关文章:

c - RLE算法应用于bmp文件

iPhone 媒体播放器框架访问原始文件

python - 在 Python 中,是否可以使用同一个装饰器来装饰类方法和非类方法?

javascript - 将函数参数映射到变量(如果存在)

c - 在 C 中的单独函数中初始化指针

javascript - 在此 javascript for 循环中使用变量

java - 类的每个对象都有自己的每个非静态成员变量的副本

图像作为 Actionscript 3 中的变量

c# - 发送 HTML 参数和文件路径参数?

fork( ) 系统调用中的混淆