In C programming, the standard library header that provides macros for variable argument lists is <stdarg.h>.
C uses an ellipsis (...) in a function declaration to allow additional arguments, as in printf. The <stdarg.h> header supplies va_list, a type used to track those unnamed arguments, along with va_start, va_arg, va_copy, and va_end. Together, these tools let a function initialize, read, duplicate, and finish processing an argument list.
The header does not automatically know how many arguments were supplied or what types they have. A function must use a convention, such as a count parameter or a printf-style format string. Reading an argument with the wrong type, or reading beyond the supplied arguments, results in undefined behavior.
A common mix-up is <stdio.h>, which declares functions such as printf but does not provide the variable-argument machinery itself. Older C code sometimes used <varargs.h>, but that nonstandard interface was superseded by <stdarg.h>.