The header <stdarg.h> declares a type and defines three macros, for advancing through a list of arguments whose number and types and not known to the called function when it is compiled.
A function may be called with a variable number of arguments of varying types. As described in the ANSI C Standard Section 6.7.1, its parameter list contains one or more parameters. The rightmost parameter plays a special role in the access mechanism, and will be designated paramN in this description.
The type declared is:
va_list
which is a type suitable for holding information needed by the macros va_start, va_arg, and va_end. If access to the varying arguments is desired, the called function shall declare an object (referred to as ap in this refsection) having type va_list. The object ap may be passed as an argument to another function: if that function invokes the va_arg macro with parameter ap the value of ap in the calling function is indeterminate and shall be passed to the va_end macro prior to any further reference to ap.