There's no ability to fill a va_list explicitly.
You should write a wrapper function. Say you need to call your function foo, instead of manually filling in a va_list, you define a new function like so:
void call_foo(int arg1, ...)
{
va_list ap;
va_start(ap, arg1);
foo(arg1, ap);
va_end(ap);
}
Now you can call foo
, which takes a va_list, however you like, by doing e.g. call_foo(1,2,3,4);, call_foo(1, 1, "Hello"); etc.
This will only allow you to specify the arguments at compile time, you can't build the arguments at runtime.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…