|
|
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.