7

Say you have 2 functions:

void func(int x,int y,...)
{
 //do stuff
}
void func2(int x,...)
{
 func(x,123,...);
}

How can you make this work, e.g pass the arg-list to the other function?

EDIT: this is a duplicate, can someone merge them or whatever?

0

2 Answers 2

8

You need a separate version that works with explicit argument lists:

void vfunc(int x, va_list args)
{
  /* do stuff */
}

void func2(int x, ...)
{
  va_list arg;

  va_start(arg, x);
  vfunc(x, arg);
  va_end(arg);
}

This is the reason there are standard functions like vprintf().

Sign up to request clarification or add additional context in comments.

Comments

0

To be added to "unwind" answer:

va_start(3) man page has decent explanation how to work with va_list objects including good example.

Also printf(3) page contains even better example of va_list based call infrastructure around vsnprintf(3) (you can get to this page using any of printf() variants name).

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.