使用stdarg.h实现简略printf(变长参数)
使用stdarg.h实现简单printf(变长参数)
主要使有stdarg.h实现对可变参数的支持。
关键步骤如下:
1.定义一个va_list类型的变量ap。
2.对ap进行初始化,使它指向可变参数表里的第一个参数。
3.通过va_arg获取指定类型的值。
4.调用va_end关闭ap指针。
代码如下:
#include <stdio.h> #include <stdarg.h> void testprintf(char *fmt, ...) { va_list ap; /* points to each unnamed arg in turn */ char *p, *sval; int ival; double dval; va_start(ap, fmt); /* make ap point to 1st unnamed arg */ for (p = fmt; *p; p++) { if (*p != '%') { putchar(*p); continue; } switch (*++p) { case 'd': ival = va_arg(ap, int); printf("%d", ival); break; case 'f': dval = va_arg(ap, double); printf("%f", dval); break; case 's': for (sval = va_arg(ap, char *); *sval; sval++) putchar(*sval); break; default: putchar(*p); break; } } va_end(ap); /* clean up when done */ } int main() { minprintf("haha%s", "12345"); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。