void va_start(va_list ap, argN);
The va_start() macro initializes ap for subsequent use by va_arg() and va_end(), and must be called first. The argument last is the name of the last argument before the variable argument list, that is, the last argument of which the calling function knows the type. Because the address of this argument may be used in the va_start() macro, it should not be declared as a register variable, or as a function or an array type.
The va_start(), va_arg(), and va_end() macros conform to C89. C99 defines the va_copy() macro.