变长参数表

来源:互联网 发布:万网云服务器解析域名 编辑:程序博客网 时间:2024/05/17 07:17
我们以实现函数printf的一个最简单的版本为例,体验下如何以可一直的方式编写可处理变长参数表的函数。因为我们的重点在于参数的处理,所以,函数minprintf只处理格式字符串和参数,格式转换则通过调用函数printf实现
#include <stdio.h>#include <stdlib.h>#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);}int main(int argc,char *argv[]){    minprintf("%s","hello world!");    return 0;}

0 0
原创粉丝点击