- 爱易网页
-
Linux
- Linux C开发中的“va_arg, va_start, va_end,va_list”诀别表示什么意思
日期:2014-05-16 浏览次数:20739 次
Linux C开发中的“va_arg, va_start, va_end,va_list”分别表示什么意思 ?
有一段DEMO函数,已经用1~5标识了5个问题,谁能帮我解释一下 ? 非常感谢!
函数如下:
/** cSplit : | 分隔符
pSrc : 指向待分解的字符串
nItemCount : 目前传入的是 9*/
int etc_StrSplit(char cSplit, char *pSrc, int nItemCount, ...)
{ va_list ap; // 1:什么意思 ?
char *pArg = NULL;
char *pStart = pSrc;
char *pEnd = NULL;
int i;
va_start( ap, nItemCount ); // 2:什么意思 ?
for( i = 0; i < nItemCount; i++ )
{ pArg = va_arg( ap, char * ); // 3:什么意思 ?
if( pArg == NULL )
break;
pEnd = strchr( pStart, cSplit );
if( pEnd == NULL )
break;
memcpy( pArg, pStart, pEnd - pStart );
pStart = pEnd + 1;
}
va_end( ap ); // 4:什么意思 ?
return i; // 5:什么意思 ?
}
------解决方案--------------------
其实这个看专门介绍的文章比较好点,这里回答那么点字很难解释清楚,这个就是给可变参数用的。
1是声明 参数list
2是初始化那个list
3逐个取出参数
4和start对应,释放资源
5仅仅是返回而已
就是你不知道参数个数,可以用这个来逐个取到参数。
------解决方案--------------------
系统程序员成长计划-像机器一样思考(一)
这篇文章里有对于变参函数原理的解释。