va_start,va_end, va_arg
来源:互联网 发布:python 爬虫 慢 编辑:程序博客网 时间:2024/05/01 22:23
在我们编程的过程中,有时可能会需要一个参数个数不确定的函数。比如说我们想求不确定个数字的和:int sum(...),但是我们怎么来确定函数里面的参数呢,怎么取得几个数字相加呢,要定位参数的位置,va_start,va_end,va_arg就派上用场了。这几个宏的原型及涉及宏的原型:
#define va_start _crt_va_start#define va_arg _crt_va_arg#define va_end _crt_va_end
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )#define _crt_va_end(ap) ( ap = (va_list)0 )
#define _ADDRESSOF(v) ( &reinterpret_cast<const char &>(v) )第一个宏也就是找到第二个参数的位置,现在把函数写具体一点:
int add_ser(int num, ...){int nSum = 0;va_list arg;va_start(arg, num);cout << *(int*)arg << endl;for(int i=0; i<num; ++i){printf("%p ", arg);nSum += va_arg(arg,int);cout << endl;}va_end(arg);cout << nSum <<endl;return nSum;}现在arg指向第二个参数,如果参数列表是这个add_ser(4,1,2,3,4);那么arg现在指向1;
第二个宏是意思是使arg指向下一个数,返回当前的数,通过打印arg便可知。注意:(ap += _INTSIZEOF(t)) - _INTSIZEOF(t)这句意思是ap指向下一个数了,但是返回的是当前数,下一次则返回下一个数,而ap指向下下个数。当va_start(arg,num)完成的时候arg指向1,第一次循环va_arg(arg,int)之后arg已经指向2了,但是va_arg(arg,int)返回的是1。当循环完成后arg指向最后一个数的下一个数
第三个宏将ap置零
- 解释va_arg, va_end, va_start
- va_start(),va_arg(),va_end示例
- va_start、va_arg、va_end用法
- va_start va_arg va_end
- VA_LIST VA_START VA_ARG VA_END
- va_start、va_arg、va_end分析
- va_list、va_start、va_arg、va_end
- va_start(),va_arg(),va_end()
- va_list va_start va_arg va_end
- va_start,va_end, va_arg
- va_list、va_start、va_arg、va_end
- va_list, va_start, va_end, va_arg
- va_list、va_start、va_arg、va_end
- va_list & va_start & va_arg & va_end
- va_list、va_start、va_arg、va_end
- va_list/va_start/va_arg/va_end
- va_start/va_arg/va_end/va_list
- va_start va_arg va_end实例
- HQL中的Like查询需要注意的地方及详细示例 .
- Windows下编译libTIFF
- canvas.drawBitmap(bitmap, src, dst, paint)
- IHTMLDocument2接口
- CUDA在Visual Studio 2010中CUDA 4.0的安装与配置
- va_start,va_end, va_arg
- 时间管理四象限
- php日志,记录日志
- C++中几种将整数转换成二进制输出的方法
- ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
- windows xp下的NOTEPAD用最新x86插件转换的结果
- 程序,进程和线程的区别与联系
- 怎样让多个并发的线程暂停,然后在主线程中改变标记让它们继续运行
- 求a^b前n位和后n位