1 / 7
文档名称:

printf 的实现及 可变参数函数研究.doc

格式:doc   大小:29KB   页数:7页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

printf 的实现及 可变参数函数研究.doc

上传人:xxq93485240 2019/1/14 文件大小:29 KB

下载得到文件列表

printf 的实现及 可变参数函数研究.doc

相关文档

文档介绍

文档介绍:()va_end()函数应用(/article/2007-5-31/1838-) 1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表voidfoo(...);voidfoo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,:#include<iostream>  voidfun(inta,...) { int*temp=&a; temp++; for(inti=0;i<a;++i) { cout<<*temp<<endl; temp++; } }intmain() { inta=1; intb=2; intc=3; intd=4; fun(4,a,b,c,d); system("pause"); return0; } Output:: 1 2 3 43:获取省略号指定的参数在函数体中声明一个va_list,然后用va_start函数来获取参数列表中的参数,使用完毕后调用va_end()结束。像这段代码: voidTestFun(char*pszDest,intDestLen,constchar*pszFormat,...) { va_listargs; va_start(args,pszFormat); _vsnprintf(pszDest,DestLen,pszFormat,args); va_end(args); }。va_arg返回参数列表中的当前参数并使argp指向参数列表中的下一个参数。va_end把argp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。 1).演示如何使用参数个数可变的函数,采用ANSI标准形式  #include〈〉  #include〈〉  #include〈〉  /*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/  intdemo(char,...);  voidmain(void)  {    demo("DEMO","This","is","a","demo!","");  }  /*ANSI标准形式的声明方式,括号内的省略号表示可选参数*/  intdemo(charmsg,...)  {       /*定义保存函数参数的结构*/   va_listargp;    intargno=0;     charpara;   /*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/    va_start(argp,msg);    while(1)       {     para=va_arg(argp,char);        if(strcmp(para,"")==0)       break;        printf("Parameter#%dis:%s\n",argno,para);        argno++;   }   va_end(argp);   /*将argp置为NULL*/ return0;  }2)//示例代码1:可变参数函数的使用#include""#include"stdarg.