免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ va_list
最近访问板块 发新帖
查看: 1649 | 回复: 6
打印 上一主题 下一主题

va_list [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 21:04 |只看该作者 |倒序浏览
func(char * a, int b)
func(char * a, int b, int c)

func(char * a, int b,...)
怎样知道我的参数是两个还是三个。
并且打印每个参数的内容。

char *a="abc";
int b =5;
int c=10;
func(char * a, int b)时,打印 a="abc"和b=5还有参数个数2
func(char * a, int b,int c)时,打印 a="abc"和b=5和c=10还有参数个数3

论坛徽章:
0
2 [报告]
发表于 2009-02-16 22:50 |只看该作者
好像比较难实现啊
va_arg(),当没有参数的时候,man手册里说会返回随机错误
不知道随机错误怎么进行判断

看过man手册里的例子,感觉va_list不是用在楼主说的这种场合的啊

论坛徽章:
0
3 [报告]
发表于 2009-02-16 22:52 |只看该作者
另外问楼主一个问题
你的func的参数列表是不是除了第一个是char *类型,后面的都是int类型啊

论坛徽章:
0
4 [报告]
发表于 2009-02-16 23:24 |只看该作者
再加一个参数,指定个数不就行了
或者最后一个参数设成NULL
自己根据va_arg的结果进行判断

论坛徽章:
0
5 [报告]
发表于 2009-02-17 05:27 |只看该作者

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

  3.               void foo(char *fmt, ...) {
  4.                    va_list ap;
  5.                    int d;
  6.                    char c, *p, *s;

  7.                    va_start(ap, fmt);
  8.                    while (*fmt)
  9.                         switch(*fmt++) {
  10.                         case 's':           /* string */
  11.                              s = va_arg(ap, char *);
  12.                              printf("string %s\n", s);
  13.                              break;
  14.                         case 'd':           /* int */
  15.                              d = va_arg(ap, int);
  16.                              printf("int %d\n", d);
  17.                              break;
  18.                         case 'c':           /* char */
  19.                              /* need a cast here since va_arg only
  20.                                 takes fully promoted types */
  21.                              c = (char) va_arg(ap, int);
  22.                              printf("char %c\n", c);
  23.                              break;
  24.                         }
  25.                    va_end(ap);
  26.               }
复制代码


不知道能否用上~~,switch之前做个计数。

论坛徽章:
0
6 [报告]
发表于 2009-02-17 08:52 |只看该作者

回复 #3 zhuhefang2006 的帖子

你的func的参数列表是不是除了第一个是char *类型,后面的都是int类型啊


--->
后面的 不 都是int类型

论坛徽章:
0
7 [报告]
发表于 2009-02-17 08:55 |只看该作者

回复 #4 gawk 的帖子

后面不能加参数了,
因为我是从别的汇编移植到c。它原来是那样实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP