Symbian中同样可以写变参函数。
void VariableFunctionL( TInt aParam, ... )
{
TInt param1 = aParam;
VA_LIST list;
VA_START(list, aParam);
TBufC<256> param2 = VA_ARG( list, TDesC );
TInt param3 = VA_ARG( list, TInt );
VA_END(list);
}
调用 VariableFunctionL( 1, _L("abcde"), 2 );
结果,param1 = 1, param2 = abcde, param3 = 2
VA_LIST,VA_START,VA_ARG和VA_END是Symbian定义的宏。
VA_START第一个参数是VA_LIST变量,实际上是一个游标,指向Arguement list首地址,第二个参数接受Argument list中的第一个值。执行后游标偏移到Argument list中下一个元素。
VA_ARG获取每个参数的值,第二个参数为参数类型,用于计算offset,执行后指针根据偏移指向Argument list中下一个元素。
对Argument list处理结束后,VA_END将游标置0,防止野指针。