[C/C++]函数可变参数表

以前看《C++ Primer》就看到过函数的可变参数列表,但是书中只是一带而过,具体用法没有介绍。现在把“圣经”看了一遍,以前的很多疑问都烟消云散。
  可变参数的使用主要用到标准头文件<stdarg.h>中定义一组宏定义,它们对如何遍历参数表进行了定义。其中:va_list类型声明一个变量(如ap),该变量将依次引用各参数。va_start将ap初始化为指向第一个无名参数的指针。每次调用va_arg,该函数都将返回一个参数,并将ap指向下一个参数。最后调用va_end,完成必要的清理工作.
 下面是用可变参数表实现的简化的printf函数,代码如下:

#include <stdarg.h>
void minprintf(char *fmt, ...){
     va_list ap;
     char *p, *sval;
     int ival;
     double dval;
     va_start(ap, fmt);
     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);
   }

  

posted @ 2015-10-04 20:38  skycore  阅读(483)  评论(0编辑  收藏  举报