stdarg.c (980B)
1 #include <stdarg.h> 2 3 struct node { int a[4]; } x = {1,2,3,4}; 4 5 print(char *fmt, ...); 6 7 main() { 8 print("test 1\n"); 9 print("test %s\n", "2"); 10 print("test %d%c", 3, '\n'); 11 print("%s%s %w%c", "te", "st", 4, '\n'); 12 print("%s%s %f%c", "te", "st", 5.0, '\n'); 13 print("%b %b %b %b %b %b\n", x, x, x, x, x, x); 14 return 0; 15 } 16 17 print(char *fmt, ...) { 18 va_list ap; 19 20 va_start(ap, fmt); 21 for (; *fmt; fmt++) 22 if (*fmt == '%') 23 switch (*++fmt) { 24 case 'b': { 25 struct node x = va_arg(ap, struct node); 26 printf("{%d %d %d %d}", x.a[0], x.a[1], x.a[2], x.a[3]); 27 break; 28 } 29 case 'c': 30 printf("%c", va_arg(ap, char)); 31 break; 32 case 'd': 33 printf("%d", va_arg(ap, int)); 34 break; 35 case 'w': 36 printf("%x", va_arg(ap, short)); 37 break; 38 case 's': 39 printf("%s", va_arg(ap, char *)); 40 break; 41 case 'f': 42 printf("%f", va_arg(ap, double)); 43 break; 44 default: 45 printf("%c", *fmt); 46 break; 47 } 48 else 49 printf("%c", *fmt); 50 va_end(ap); 51 }