设为首页 加入收藏

TOP

C语言中的可变参数用法
2014-11-24 01:04:14 来源: 作者: 【 】 浏览:3
Tags:言中 可变 参数 用法

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中可以搜索其宏定义。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言的神奇语法 下一篇用Python脚本整理我的音乐

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: