#include struct node { int a[4]; } x = {1,2,3,4}; print(char *fmt, ...); main() { print("test 1\n"); print("test %s\n", "2"); print("test %d%c", 3, '\n'); print("%s%s %w%c", "te", "st", 4, '\n'); print("%s%s %f%c", "te", "st", 5.0, '\n'); print("%b %b %b %b %b %b\n", x, x, x, x, x, x); return 0; } print(char *fmt, ...) { va_list ap; va_start(ap, fmt); for (; *fmt; fmt++) if (*fmt == '%') switch (*++fmt) { case 'b': { struct node x = va_arg(ap, struct node); printf("{%d %d %d %d}", x.a[0], x.a[1], x.a[2], x.a[3]); break; } case 'c': printf("%c", va_arg(ap, char)); break; case 'd': printf("%d", va_arg(ap, int)); break; case 'w': printf("%x", va_arg(ap, short)); break; case 's': printf("%s", va_arg(ap, char *)); break; case 'f': printf("%f", va_arg(ap, double)); break; default: printf("%c", *fmt); break; } else printf("%c", *fmt); va_end(ap); }