|
|
1.1 ! root 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: } ! 15: ! 16: print(char *fmt, ...) { ! 17: va_list ap; ! 18: ! 19: va_start(ap, fmt); ! 20: for (; *fmt; fmt++) ! 21: if (*fmt == '%') ! 22: switch (*++fmt) { ! 23: case 'b': { ! 24: struct node x = va_arg(ap, struct node); ! 25: printf("{%d %d %d %d}", x.a[0], x.a[1], x.a[2], x.a[3]); ! 26: break; ! 27: } ! 28: case 'c': ! 29: printf("%c", va_arg(ap, char)); ! 30: break; ! 31: case 'd': ! 32: printf("%d", va_arg(ap, int)); ! 33: break; ! 34: case 'w': ! 35: printf("%x", va_arg(ap, short)); ! 36: break; ! 37: case 's': ! 38: printf("%s", va_arg(ap, char *)); ! 39: break; ! 40: case 'f': ! 41: printf("%f", va_arg(ap, double)); ! 42: break; ! 43: default: ! 44: printf("%c", *fmt); ! 45: break; ! 46: } ! 47: else ! 48: printf("%c", *fmt); ! 49: va_end(ap); ! 50: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.