Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294297
  • 博文数量: 70
  • 博客积分: 1990
  • 博客等级: 上尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-02 08:52
文章分类

全部博文(70)

文章存档

2015年(2)

2014年(9)

2013年(2)

2012年(20)

2011年(1)

2010年(36)

分类: C/C++

2012-03-31 22:11:32

源码:

//loop variational parameters disposal

#include

#include

#include

void deal(char *fmt,...);

 

int main()

{

       deal("%s 1%d %s %c","I love linux",2011,"Five years",'y');

      

       return EXIT_SUCCESS;

}

 

void deal(char *fmt,...)

{

       va_list pp;

       char cc,*str = NULL;

       int dd;

      

       printf("fmt is %s\n",fmt);

      

       va_start(pp,fmt);

      

       while(*fmt)

       {

              putc(*fmt,stdout);

              switch(*fmt++)

              {

                     case 's':

                            str = va_arg(pp,char *);  // type va_arg(va_list ap, type);

                            printf("string is %s\n",str);

                            break;

                     case 'd':

                            dd = va_arg(pp,int);

                            printf("int is %d\n",dd);

                            break;

                     case 'c':

                            cc = va_arg(pp,int);     //char will be promote to int

                            printf("char is %c\n",cc);

                            break;

                     default:

                            printf("*\n");                 //如果没有匹配选项,打印一个字符注释

              }

       }

      

       va_end(pp);

}

 

运行效果:
 

编程小结:

可变参数处理

可变参数处理有两种情况:

1)命令运行时带参数,即运行可执行程序时的参数,这里一般用argv[i]来处理第i个参数;

2)程序内部的函数调用时的参数,一般使用va_list存储可变参数,使用va_函数来处理。

 

函数调用的可变参数处理

我的理解是va_list可能就是一个栈,可以用来存储可变参数。

 

va_list pp;                     //首先定义一个栈,用于接收可变参数

va_start(pp,fmt);                //将可变参数挂在栈上,地址映射?

if(*fmt == 's')

    str = var_arg(pp,char *);     //参数格式遇到%s中的s就去栈中取字符串

if(*fmt == 'd')

    dd = var_arg(pp,int);     //参数格式遇到%d中的d就去栈中取整数

va_end(pp);                  //使用完毕,清除栈
阅读(1051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~