Variadic functions are functions (e.g.printf) which take a variable number of arguments.
The declaration of a variadic function uses an ellipsis as the last parameter, e.g.intprintf(constchar* format, ...);. Seevariadic arguments for additional detail on the syntax and automatic argument conversions.
Accessing the variadic arguments from the function body uses the following library facilities:
Types | ||
| holds the information needed byva_start,va_arg,va_end, andva_copy (typedef)[edit] | ||
Macros | ||
Defined in header <stdarg.h> | ||
| enables access to variadic function arguments (function macro)[edit] | ||
| accesses the next variadic function argument (function macro)[edit] | ||
(C99) | makes a copy of the variadic function arguments (function macro)[edit] | |
| ends traversal of the variadic function arguments (function macro)[edit] | ||
Print values of different types.
#include <stdarg.h>#include <stdio.h> void simple_printf(constchar* fmt, ...){ va_list args; for(va_start(args, fmt);*fmt!='\0';++fmt){switch(*fmt){case'd':{int i= va_arg(args,int);printf("%d\n", i);break;}case'c':{// A 'char' variable will be promoted to 'int'// A character literal in C is already 'int' by itselfint c= va_arg(args,int);printf("%c\n", c);break;}case'f':{double d= va_arg(args,double);printf("%f\n", d);break;}default:puts("Unknown formatter!");goto END;}}END: va_end(args);} int main(void){ simple_printf("dcff",3,'a',1.969,42.5);}
Output:
3a1.96900042.50000
C++ documentation forVariadic functions |