技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

C语言:传递可变参数

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
*/



posted on 2012-03-14 22:53  codestyle  阅读(1607)  评论(0)    收藏  举报