我砍了一些舊的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