可变参数

来源:互联网 发布:淘宝上买到假货仅退款 编辑:程序博客网 时间:2024/05/29 13:11
void va_start( va_list arg_ptr, prev_param ); 
type va_arg( va_list arg_ptr, type ); 
void va_end( va_list arg_ptr );


va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明
             va_list类型的一个对象       定义: typedef char *  va_list;
va_start:访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和
               va_end使用;
va_arg: 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用va_arg都会修改
              用va_list声明的对象,从而使该对象指向参数列表中的下一个参数;

va_end:该宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回。


void myfun(char *str, ...){printf("str:%s\n", str);va_list arg;va_start(arg, str);while (true){str = va_arg(arg, char *);if (strcmp(str, "\0") == 0){break;}printf("%s\n", str);}va_end(arg);}voidfoo(char *fmt, ...){va_list ap;int d;char c, *s;va_start(ap, fmt);while (*fmt)switch (*fmt++) {case 's':              /* string */s = va_arg(ap, char *);printf("string %s\n", s);break;case 'd':              /* int */d = va_arg(ap, int);printf("int %d\n", d);break;case 'c':              /* char *//* need a cast here since va_arg onlytakes fully promoted types */c = (char)va_arg(ap, int);printf("char %c\n", c);break;}va_end(ap);}


0 0
原创粉丝点击