通过结构体实现C可变参数函数

通常C语言中实现可变参数函数的方法,要利用<stdarg.h>的库函数,比如

http://c-faq-chn.sourceforge.net/ccfaq/node261.html

看上去比较繁琐。

今天忽然想到可以借助结构体实现这样的功能。首先根据所有可能用到的参数定义一个结构体,比如

struct par_all
{
int var_i;
int var_j;
float var_x;
float var_y;
char *var_c;
char *var_d;
...
} myparam;

然后定义函数

myfun(int nargc, struct par_all *mypar)
{
 if (nargc== ...)
 {
    do_something(); 
 }
 else if(nargc==...)
   ...
}

调用时根据需要对myparam中的要用参数赋值,同时设定参数个数nargc,这样函数根据nargc来选用myparam里面的参数。

(当然更一般的方法:未必用int nargc传递参数个数,比如用char flag传递一个字母符号作用选用参数的开关。)