- 论坛徽章:
- 3
|
做代码移植的时候,在一个函数中有一处代码, va_list ListA = ListB;
其中ListB是该函数的入参,也是va_list类型的。
在linux下编译的时候该处代码报错如下:
error: array must be initialized with a brace-enclosed initializer
然后我在网上看了下,有人说va_list类型的变量不能直接赋初值。
百科里面有这么一段:
VA_START宏,获取可变参数列表的第一个参数的地址(ap是类型为va_list的指针,v是可变参数最左边的参数):
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
VA_ARG宏,获取可变参数的当前参数,返回指定类型并将指针指向下一参数(t参数描述了当前参数的类型):
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
VA_END宏,清空va_list可变参数列表:
#define va_end(ap) ( ap = (va_list)0 )
难道得把代码改成下面这样?
va_list ListA;
va_start(ListA, ListB);
希望了解的大大们给我讲解下,谢谢了。
|
|