Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129080
  • 博文数量: 40
  • 博客积分: 2228
  • 博客等级: 大尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-12 11:48
文章分类

全部博文(40)

文章存档

2011年(11)

2010年(29)

我的朋友

分类: LINUX

2010-07-19 00:05:41

编写函数参考可变的程序:
1、主要的步骤:
第一步:调用va_start(ap,fmt)
       说明:将ap指向第一无名参数
第二步:遍历获取每个参数
      说明:调用va_arg(ap,int),返回值问参数的内容。
第三不:调用va_end(ap)
      说明:结束时清理工作
注释:
1、ap指参数指针
2、fmt为参数格式化字符串
3、如果是字符串则需要遍历所有的字符串,并且要也'\0'做为判断条件。
 
下面是实例代码:
 

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

void minprintf(char * fmt,...);
void test(int a,int b,int c);

int main()
{
//    minprintf("num=%d,double=%f,string=%s\n",12,12.11,"ss");

    minprintf("str=%s","abc");
    test(1,2,3);
}

void test(int a,int b,int c)
{
    printf("%d,%d,%d\n",a,b,c);
}

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);
}


阅读(1009) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~