C函数要在程序中用到以下这些宏:
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引用的函数中正常返回。
vaarg.c
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/* ANSI标准形式的声明方式,括号内的省略号表示可选参数 */
int demo(char *msg, ...)
{
va_list argp; /* 定义保存函数参数的结构(list),指向参数的指针 */
int argno = 0; /* 纪录参数个数 */
char *para; /* 存放取出的字符串参数 */
printf("Parameter #%d is: %s\n", argno, msg);
argno++;
/* argp指向传入的第一个可选参数,msg是最后一个确定的参数 */
va_start(argp, msg);
w