1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdarg.h>
  4. /***编写可变长参数列表的函数案例*/
  5. /*
  6. void minprintf(char *fmt,...)这个函数只处理格式字符串和参数,格式的转换则通过printf函数实现
  7. 省略号表示参数的数量和类型是可变的,省略号只能出现再参数表的尾部,minprintf不需要像printf
  8. 函数返回实际输出的字符数,所以可以返回类型设置为void
  9. 编写minprintf关键在于如何处理一个甚至连名字都没有的参数表,标准头文件<stdarg.h>中包含一组宏定义
  10. ,他们对如何遍历参数表进行了定义,该头文件的实现因不同的机器而不同,但提供的接口都是一致的。
  11. va_list类型用于声明一个变量,该变量依次引用各参数,在函数minprintf中,将该变了成为ap,意思是参数
  12. 指针,在使用ap前,该宏必须先被调用一次,参数表至少包含一个有名参数,va_start将最后一个有名参数
  13. 做为起点,每次调用,va_arg,该参数返回一个参数,并将ap指向下一个参数,va_arg使用一个类型名来决定
  14. 返回对象的类型,指针移动的步长,最后必须在函数返回之前调用va_end,以便完成一些必要的清理工作。*/
  15. void minprintf(char *fmt,...)
  16. {
  17. va_list ap;
  18. char *p,*sval;
  19. double dval;
  20. int ival;
  21. va_start(ap,fmt);
  22. for(p=fmt;*p;p++)
  23. {
  24. if(*p!='%')
  25. {
  26. putchar(*p);
  27. continue;
  28. }
  29. switch (*++p)
  30. {
  31. case 'd':
  32. ival=va_arg(ap,int);
  33. printf("%d",ival);
  34. break;
  35. case 'f':
  36. dval=va_arg(ap,double);
  37. printf("%f",dval);
  38. break;
  39. case 's':
  40. for(sval=va_arg(ap,char *);*sval;sval++)
  41. {
  42. putchar(*sval);
  43. }
  44. break;
  45. default :
  46. putchar(*p);
  47. break;
  48. }
  49. }
  50. va_end(ap);
  51. }
  52. int sum(int m,...)
  53. {
  54. va_list ap;//依次指向每个无名参数
  55. va_start(ap,m);//将ap指向第一个无名参数
  56. int sum=0;
  57. while(m--)
  58. {
  59. sum+=va_arg(ap,int);
  60. }
  61. va_end(ap);//结束时候的清理工作
  62. return sum;
  63. }
  64. int main(int argc,char *argv[])
  65. {
  66. minprintf("%dhao%shao%f",10,"asda",20.1);
  67. printf("%d",sum(3,10,20,32));
  68. }

C语言变长参数实现的更多相关文章

  1. 《OOC》笔记(3)——C语言变长参数va_list的用法

    <OOC>笔记(3)——C语言变长参数va_list的用法 C语言中赫赫有名的printf函数,能够接受的参数数目不固定,这就是变长参数.C#里也有params这个关键字用来实现变长参数. ...

  2. C++中的变长参数

    新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...

  3. Scala 变长参数

    如果Scala定义变长参数 def sum(i Int*), 那么调用sum时,可以直接输入sum(1,2,3,4,5) 但是不可以sum(1 to 5) 必须要将1 to 5 强制为seq sum( ...

  4. C++11变长参数模板

    [C++11变长参数模板] C++03只有固定模板参数.C++11 加入新的表示法,允许任意个数.任意类别的模板参数,不必在定义时将参数的个数固定. 实参的个数也可以是 0,所以 tuple<& ...

  5. 【Unix环境高级编程】编写变长参数函数

    文件的格式输入输出函数都支持变长参数.定义时,变长参数列表通过省略号'...'表示, 因此函数定义格式为: type 函数名(parm1, parm2,parmN,...); Unix的变长参数通过v ...

  6. java常量和变量的定义规则,变长参数的使用

    首先是定义的一般规则,类名首字母全部大写,常量全部大写用下划线分隔,变量用驼峰形式.注意使用long赋值用L时不能写小写的L要写大写的,不然会和数字“1”傻傻分不清. 下面是举例: public cl ...

  7. Lua 变长参数(variable number of arguments)

    lua变长参数 function add ( ... ) for i, v in ipairs{...} do print(i, ' ', v) end end add(1, 2, 'sdf') lu ...

  8. 【小白学Lua】之Lua变长参数和unpack函数

    一.简介 Lua的变长参数和unpack函数在实际的开发中应用的还挺多的,比如在设计print函数的时候,需要支持对多个变量进行打印输出,这时我们就需要用到Lua中的变长参数和unpack函数了. 二 ...

  9. Java基础12-工具类;变长参数;IO

    作业解析 取出整数的16进制表示形式 \u00ff /** * int2hex * */ public static String int2hex(int i) { String str = &quo ...

随机推荐

  1. 初学Linux基本的命令操作应当记牢

    Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touc ...

  2. 微信jssdk安卓机分享QQ好友和QQ空间出现{"errMsg":"shareQQ:fail"}

    使用ajax请求appid之类的配置,然后进行wx.config和wx.ready,苹果机上是完全OK的,但是安卓机上十次有九次是失败,只有一次能成功,百度了一下,有人说是参数有空格,有人说是微信bu ...

  3. 未来-YLB-跳蚤市场:跳蚤市场(flea market)

    ylbtech-未来-YLB-跳蚤市场:跳蚤市场(flea market) 跳蚤市场(flea market)是欧美等西方国家对旧货地摊市场的别称.由一个个地摊摊位组成,市场规模大小不等. 出售商品多 ...

  4. JS-拷贝对象

    As it is well known to us all, 拷贝对象分为浅拷贝和深拷贝,深拷贝只会复制地址,深拷贝才会复制内容,那么 JS 如何进行这两种拷贝呢? # 浅拷贝 ## Object.a ...

  5. SourceInsight 支持 Python

    SourceInsight 支持 Python 步骤一:下载相关的插件 Python.CLF插件 链接如下: Python.CLF|Python.CLF下载_红软基地 http://www.rsdow ...

  6. POJ 1797 Heavy Transportation (最大生成树)

    题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...

  7. PAT甲级——A1149DangerousGoodsPackaging【25】

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  8. PAT甲级——A1144 TheMissingNumber【20】

    Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...

  9. 2.1 Nginx服务器安装

    2.1 Nginx目录和文件介绍 windows下解压nginx后的文件介绍: conf:存放Nginx服务器的配置文件,包含Nginx服务器的基本配置文件和对部分特性的配置文件,正确配置此文件可以保 ...

  10. oracle知识博客链接

    http://blog.csdn.net/YiQiJinBu/article/category/1100395/1