va_arg retrieves the next value from a va_list, but requires the caller to specify its type explicitly. A variadic function initializes the list with va_start, then repeatedly applies va_arg inside a loop. section 17.4.2
Summing variadic double arguments
A function receiving n double values can retrieve each value with va_arg(ap, double), adding it to a running sum on each iteration. The function must receive n separately: va_arg does not reveal the list length. section 17.4.2
void va_start(va_list ap, ...);
void va_end(va_list ap);
\textit{type} va_arg(va_list ap, \textit{type});
void va_copy(va_list dest, va_list src);
The related variadic macros show va_arg alongside va_start, va_end, and va_copy. section 17.4.2

