我砍了一些旧的C API和我有下面的代码编译错误:如何获取va_arg的地址?
void OP_Exec(OP* op , ...)
{
int i;
va_list vl;
va_start(vl,op);
for(i = 0; i < op->param_count; ++i)
{
switch(op->param_type[i])
{
case OP_PCHAR:
op->param_buffer[i] = va_arg(vl,char*); // ok it works
break;
case OP_INT:
op->param_buffer[i] = &va_arg(vl,int); // error here
break;
// ... more here
}
}
op->pexec(op);
va_end(vl);
}
与gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
错误是:
main.c|55|error: lvalue required as unary ‘&’ operand
那么到底为什么它是不可能在这里得到一个指向参数?
如何解决?此代码通常以不同的OP*
执行,所以我宁愿不分配额外的内存。
只知道参数的大小就可以遍历va_list吗?
va_arg是一个宏,你不能把它的地址。 – 2010-04-19 21:20:26