va_list和syslog的使用

来源:互联网 发布:项城市乡镇人口数据 编辑:程序博客网 时间:2024/04/26 11:05

一、可变参数列表的使用
c语言解决变参问题的用法总结下
1,首先在函数中定义个va_list变量
2,然后使用va_start宏初始化刚定义的va_list变量,第二个参数是第一个可变参数的前一个参数
3,使用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型。
4,最后用va_end宏结束可变参数的获取,如果可变参数表中有多个参数,可依次调用va_arg获取每个参数。

顺带着看了下windows平台下的实现
va_start调用_crt_va_start

#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

_ADDRESSOF是获取v(即可变参数的前一个参数)的地址。
_INTSIZEOF(v)是获取上述的偏移量,此时得到可变参数列表的首地址。

va_arg调用_crt_va_arg

#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

计算可变参数表中下一个参数的首地址,并转换成t类型的变量。

va_end调用_crt_va_end

#define _crt_va_end(ap)      ( ap = (va_list)0 )

将ap指针设置为0,防止后续的野指针情况。

二、syslog

原创粉丝点击