linux 可变参的用法,C语言中的可变参数用法

va_系列函数包含va_start,va_arg,va_end,使用类型va_list。

其他使用va_list类型的函数有vprintf,vfprintf,vsprintf。

va是Variable Arguments的首字母缩写。

下面是一个毫无意义的函数,使用可变参数,只是演示了va_系列函数的用法。

void func( int first, ... ) {

va_list marker;

va_start( marker, first );  // 初始化marker变量

int next = va_arg( marker, int); // 根据当前参数

// 的字节数(即类型)取得下一个参数的地址,从而获得其值。

// 通过这种方法,可以获得下面的所有参数。当然,你得想办法

// 得知共有多少个参数。

va_end( marker );   // 这里重置marker(可能要释放空间吧,赐教)。

}

一个可能有意义的用法如下,自定义一个日志函数,可以做到格式化输出日志信息,灵活性较大。

这种函数在一些项目中很常见。

// 自定义的添加日志函数

void LogAppend( char * format, ... ) {

// 可以在这里先输出时间信息到文件中

va_list marker;

va_start( marker, format);

char buf[1024];

vsprintf( buf, format, marker);

// 最后将buf写入文件中

}

v系列函数只是将可变参数列表...替换成了va_list类型参数,如

vprintf对应于printf,他们的类型分别是:

int vprintf( char *, va_list);

int printf( char *, ...);

最后,va_list到底如何实现的呢?有兴趣的话在stdio.h中可以搜索其宏定义。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值