void g(...); void f(...){g(...);} f("%s %d","hello",2011); //需求:函数g,f都支持可变参数,外部调用函数f,函数f把自己的参数传递给g
#define FUNC(format,...) g(format,__VA_ARGS__) //方案1:将f实现为一个宏(但是这种方法不够灵活)
void g(char ** format,va_list *args) { va_start(*args, *format); } void f(char *format, ...) { va_list args; g(&format,&args); } f("%s %d","hello",2011); /* 方案2 f必须将整&format传递给g,因为g拿到args不是为了指向自己的参数列表,而是为了指向f的参数列表,这样就等于f把自己的参数传递给g */