Mega Code Archive

 
Categories / C / Linux
 

Va_arg, variable argument lists

#include <stdio.h> #include <stdarg.h> void foo(char *fmt, ...); int main(void) { int i = 50; char str[] = "jeronimo"; char x = 'a'; printf(" foo prints: "); foo("d", i); printf(" foo prints: "); foo("s", str); printf(" foo prints: "); foo("c", x); return 0; } void foo(char *fmt, ...) { va_list ap; int d; char c, *s; va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char *); printf("string %s\n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d\n", d); break; case 'c': /* char */ /* need a cast here since va_arg only takes fully promoted types */ c = (char) va_arg(ap, int); printf("char %c\n", c); break; } va_end(ap); }