Continued from C variadic functions (a).
Here is how we can iterate over the arguments twice:
void foo(const char* format, ...) {
va_list args, args2;
va_start(args, format);
va_copy(args2);
// Access args and args2 here using va_arg
va_end(args);
va_end(args2);
}
Note that the order of calls of va_end
doesn’t matter since behaviour of va_copy
is as if va_start
was called again for args2
. Cf: va_start(3) variable argument lists - Linux man page.