#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap=(va_list)v + _INTSIZEOF(v) ) //第一个可选参数地址
#define va_arg(ap,t) ( *(t *)((ap +=_INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址
#define va_end(ap) ( ap=(va_list)0 ) //使指针无效
使用
VA_LIST是C语言中解决可变参数问题的一组宏
VA_LIST的用法:
(1)首先在函数中定义一个VA_LIST类型变量。该变量是指向参数的指针。
(2)然后使用VA_START宏来初始化刚刚定义的VA_LIST变量。该宏的第二个参数是第一个可变参数的前一个参数,它是一个固定参数。
(3) 然后使用VA_ARG返回可变参数。 VA_ARG 的第二个参数是要返回的参数类型。
(4)最后使用VA_END宏结束变量参数的获取。然后您可以在函数中使用第二个参数。如果函数有多个可变参数,则依次调用VA_ARG获取各个参数。
(PS:哈哈哈,是不是很专业?我感觉13太多了,上面的原理和用法都是从网上抄来的)
我觉得原理和用法写得非常通俗易懂,至少我能看懂!
惯例:
写一个简单具体的代码给大家看,从而加深理解,学会应用。
- (void)mutableParamList:(NSString*)firstPara,
{
va_list 参数;
id 每个对象;
if(第一个Para) {
NSLog(@"1:%@",firstPara);
va_start(参数,firstPara);
while((eachObject=va_arg(参数,id))) {
NSLog(@"2:%@",eachObject);
}
va_end(参数);
}
}
【深入解析:可变参数的应用与优化技巧】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我记得小时候学过这个,可以用来传入多个参数到一个函数里面
有17位网友表示赞同!
太牛了!这样就能写出很多灵活的函数
有10位网友表示赞同!
以前用固定参数写函数感觉很麻烦,现在可变参数va听起来轻松多了
有9位网友表示赞同!
要是在实际项目中用上,效率肯定提高好多倍
有14位网友表示赞同!
这个特性在一些通用性函数的设计上很有帮助
有18位网友表示赞同!
好像有些编程语言不这么支持吧?
有7位网友表示赞同!
学习一下可变参数va,感觉以后写代码会更方便!
有17位网友表示赞同!
想问问可变参数va的应用场景有哪些?
有17位网友表示赞同!
这个概念还挺抽象的,需要好好琢磨一下
有20位网友表示赞同!
有没有具体的例子可以参考?
有9位网友表示赞同!
我之前用其他方法替代过可变参数va,这个新知识点还是很有用的
有14位网友表示赞同!
看起来学习起来不是很难的样子!
有16位网友表示赞同!
在大型项目中,可以使用此特性简化很多代码块的编写
有20位网友表示赞同!
了解一下它的底层实现机制怎么样?
有13位网友表示赞同!
我最近也在学习相关的编程语言,这个可变参数va正好可以帮助我
有6位网友表示赞同!
对于新手来说,应该先学会基础知识再来学习这一层级概念吧!
有9位网友表示赞同!
可以用这个特性写出许多实用的工具函数啊!
有5位网友表示赞同!
在实际开发过程中,使用可变参数可提高代码的通用性!
有12位网友表示赞同!
之前没有想过这个问题,现在看来可变参数是一个很不错的思路
有12位网友表示赞同!