mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 15:21:35 +00:00
51 lines
980 B
C
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);
|
|
}
|