{{keywords>wiki library source code example reference}} void va_end(va_list ap); === description === Each invocation of va_start() must be matched by a corresponding invocation of va_end() in the same function. After the call va_end(ap) the variable ap is undefined. Multiple traversals of the list, each bracketed by va_start() and va_end() are possible. va_end() may be a macro or a function. The [[c:stdarg.h:va_start|va_start()]], [[c:stdarg.h:va_arg|va_arg()]], and [[c:stdarg.h:va_end|va_end()]] macros conform to C89. C99 defines the [[c:stdarg.h:va_copy|va_copy()]] macro.