ioq3/lcc/tst/stdarg.c
2005-08-28 17:54:51 +00:00

51 lines
980 B
C

#include <stdarg.h>
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);
}