【发布时间】:2012-12-04 13:11:50
【问题描述】:
如果我有一个 va_list 我知道如何提取它的所有元素:
void printInts(int n,...)
{
va_list va;
va_start(va, n);
for(unsigned int i=0; i<n; i++)
{
int arg=va_arg(va, int);
printf("%d",arg);
}
va_end(va);
}
所以当我调用 printInts(3,1,2,3) 时,va_list 会填充所有参数。
但是如何在不使用 va_start 的情况下手动填充 va_list?我的意思是我想要类似的东西:
va_list va;
push_arg(va, int, 5); // And so on until I fill all parameters
...
我需要这个,因为有一个函数接受 va_list 作为参数,但我不知道如何填充所有参数的 va_list。
【问题讨论】:
-
va_list类型实际上并不是一个列表,它实际上通常是一种指向堆栈的指针,va_arg修改此指针以指向堆栈上的下一个参数. -
@JoachimPileborg:有时它不是指向堆栈的指针。
-
你为什么不想使用
va_start? -
因为我需要一个包含所有参数的原始 va_list,所以我需要做与 va_start-va_arg-va_end 相反的事情。
标签: c variadic-functions