C语言可变参数函数怎么写?

来源:互联网 发布:网络隔离器工作原理 编辑:程序博客网 时间:2024/05/29 18:11

这里的可变参数指的是参数的个数和类型不确定,

比如我们熟悉的printf,原型是int printf(const char *format, ...);

那么我们自己怎么实现呢?比如我写个函数名叫foo,参考printf写成如下格式,

void foo(const char *fmt,...){}

然后我们需要使用stdarg.h这个头文件里的va_start,va_end这两个宏

我们写成这样


void foo(const char *fmt,...){    va_list ap;    va_start(ap,fmt);    va_end(ap);}

va_start目的是用fmt来初始化ap。往后对可变参数的挨个获取,可以使用宏va_arg对ap进行操作来实现。

如果我们不想一个一个获取,就想获取可变参数拼接成的字符串,如printf输出到标准输出的结果那样。

那么我们需要借助vsnprintf这个函数,定义在stdio.h里。

我们写成这样


void foo(const char *fmt,...){    va_list ap;    va_start(ap,fmt);    char string[128] = {0};    vsnprintf(string,strlen(string)-1,fmt,ap);    va_end(ap);    printf("%s",string);}

可变参数的用法就是这么的简单,快来试试吧。