va_start initializes a va_list so a variadic function can access arguments after its final named parameter. Pass the va_list object itself—not its address—and identify that last named parameter. section 16.5.2
Initializing a variable-argument list
double sumIt(size_t n, ...) { double ret = 0.0; va_list va; va_start(va, n); for (size_t i = 0; i < n; ++i) ret += va_arg(va, double); va_end(va); return ret; } Here, n is the last named parameter, so va_start(va, n) prepares va for va_arg. The function must track the number of values itself; va_start and va_arg provide no list length. section 16.5.2
Passing the initialized list onward
va_start can prepare arguments for an existing library function instead of manually processing them: va_list va; va_start(va, format); ret = vfprintf(iodebug, format, va); va_end(va); This pattern uses va_start and va_end to delimit the va_list's use. section 16.5.2
1 void va_start(va_list ap, parmN);
2 void va_end(va_list ap);
3 type va_arg(va_list ap, type);
4 void va_copy(va_list dest, va_list src);
!@%STYLE%@!
{"css":"{\"css\": \"font-weight: bold;\"}","target":"[[{\"line\":0,\"ch\":0},{\"line\":0,\"ch\":1}],[{\"line\":0,\"ch\":4},{\"line\":0,\"ch\":8}],[{\"line\":1,\"ch\":4},{\"line\":1,\"ch\":8}],[{\"line\":3,\"ch\":4},{\"line\":3,\"ch\":8}],[{\"line\":0,\"ch\":9},{\"line\":0,\"ch\":17}],[{\"line\":0,\"ch\":18},{\"line\":0,\"ch\":25}],[{\"line\":1,\"ch\":16},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":16},{\"line\":2,\"ch\":23}],[{\"line\":3,\"ch\":17},{\"line\":3,\"ch\":24}],[{\"line\":1,\"ch\":0},{\"line\":1,\"ch\":1}],[{\"line\":0,\"ch\":4},{\"line\":0,\"ch\":8}],[{\"line\":1,\"ch\":4},{\"line\":1,\"ch\":8}],[{\"line\":3,\"ch\":4},{\"line\":3,\"ch\":8}],[{\"line\":1,\"ch\":9},{\"line\":1,\"ch\":15}],[{\"line\":0,\"ch\":18},{\"line\":0,\"ch\":25}],[{\"line\":1,\"ch\":16},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":16},{\"line\":2,\"ch\":23}],[{\"line\":3,\"ch\":17},{\"line\":3,\"ch\":24}],[{\"line\":2,\"ch\":0},{\"line\":2,\"ch\":1}],[{\"line\":2,\"ch\":9},{\"line\":2,\"ch\":15}],[{\"line\":0,\"ch\":18},{\"line\":0,\"ch\":25}],[{\"line\":1,\"ch\":16},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":16},{\"line\":2,\"ch\":23}],[{\"line\":3,\"ch\":17},{\"line\":3,\"ch\":24}],[{\"line\":3,\"ch\":0},{\"line\":3,\"ch\":1}],[{\"line\":0,\"ch\":4},{\"line\":0,\"ch\":8}],[{\"line\":1,\"ch\":4},{\"line\":1,\"ch\":8}],[{\"line\":3,\"ch\":4},{\"line\":3,\"ch\":8}],[{\"line\":3,\"ch\":9},{\"line\":3,\"ch\":16}],[{\"line\":0,\"ch\":18},{\"line\":0,\"ch\":25}],[{\"line\":1,\"ch\":16},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":16},{\"line\":2,\"ch\":23}],[{\"line\":3,\"ch\":17},{\"line\":3,\"ch\":24}],[{\"line\":0,\"ch\":18},{\"line\":0,\"ch\":25}],[{\"line\":1,\"ch\":16},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":16},{\"line\":2,\"ch\":23}],[{\"line\":3,\"ch\":17},{\"line\":3,\"ch\":24}]]"}
!@%STYLE%@!
Compare the pseudo-interfaces for va_start, va_end, va_arg, and va_copy. section 16.5.2

