C变参函数其实不难

//这里给出的是printf的简易实现(非原创)
//按照va_list,va_start,va_copy,va_arg,va_end的顺序使用
//注意:1.void va_start( va_list ap, parmN );第二个参数是你定义的参数列表的最后一个固定参数。2.T va_arg( va_list ap, T );类型T会有c语言的类型提升掺杂其中,如char->int float->double的自动类型转换
#include <stdio.h> #include <stdarg.h>   void simple_printf(const char* fmt, ...) { va_list args; va_start(args, fmt);   while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); printf("%d\n", i); } else if (*fmt == 'c') { // 注意自动转换为整数类型 int c = va_arg(args, int); printf("%c\n", c); } else if (*fmt == 'f') { double d = va_arg(args, double); printf("%f\n", d); } ++fmt; }   va_end(args); }   int main(void) { simple_printf("dcff", 3, 'a', 1.999, 42.5); }

猜你喜欢

转载自www.cnblogs.com/catgo/p/9967384.html