码迷,mamicode.com
首页 > 其他好文 > 详细

C 可变参数

时间:2014-12-07 20:19:01      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   数据   

#include <stdio.h>
#include <stdarg.h>

extern char* baseconv(unsigned int,int); //格式化数字

void miniprintf(const char *fmt,...)
{
    const char* p;
    int i;
    unsigned u;
    char* s;
    va_list argp;
    va_start(argp,fmt);

    for(p=fmt;*p!=\0;p++)
    {
        if(*p!=%)
        {
            putchar(*p);
            continue;
        }
        
        switch(*++p)
        {
            case c:
                i=va_arg(argp,int);//“默认参数提升”规则,在可变参数部分
                putchar(i);
                break;
            case d:
                i=va_arg(argp,int);
                if(i<0)
                {
                    i=-i;
                    putchar(-);
                }
                fputs(baseconv(i,10),stdout);
                break;
            case o:
                u=va_arg(argp,unsigned int);
                fputs(baseconv(u,8),stdout);
                break;
            case s:
                s=va_arg(argp,char*);
                fputs(s,stdout);
                break;
            case u:
                u=va_arg(argp,unsigned int);
                fputs(baseconv(u,10),stdout);
                break;
            case x:
                u=va_arg(argp,unsigned int);
                fputs(baseconv(u,16),stdout);
                break;
            case %:
                putchar(%);
                break;
        }
    }
    va_end(argp);
}

关于可变参数的部分,仔细想想的话:应该是把所有的参数放到了一个块内存中,然后将数据一个个取出来。但是取出来的时候要定义类型,每个类型确定了取出来的内存的大小。

ps:定义函数时第一个参数不能缺少吧,然参数的开始地址怎么找,至少要给个名字(地址)

va_arg(argp,var_Type);

C 可变参数

标签:style   blog   io   ar   color   sp   for   on   数据   

原文地址:http://www.cnblogs.com/yoru/p/4149722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!