#include<stdarg.h>
#include<stdio.h>
int m_sum(int num,...)
{
va_list var;
int count;
int sum=0;
va_start(var,num);
for(count=0;count<num;count++)
{
sum+=va_arg(var,int);
}
va_end(var);
return sum;
}
int main(int argc,char **argv)
{
printf("sum1:%d",m_sum(3,5,2,2));
printf("sum2:%d",m_sum(5,5,6,74,21,4));
getchar();
}
可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件。需要使用类型va_list和三个宏——va_start,va_arg和va_end来实现可变参数的访问。
下面是自己写的模仿printf函数:
#include<stdio.h>
#include<stdarg.h>
#define INT 'd'
#define FLOAT 'f'
void print(char *msg,...)
{
int i=5;
double f=25.2;
printf("%d ",i);
printf("%f \n",f);
va_list var_arg;
va_start(var_arg,msg);
while(*msg!='\0'){
if(*msg=='%'){
msg++;
if(*msg==INT){
i=va_arg(var_arg,int);
printf("%d",i);
msg++;
continue;
}
else if(*msg==FLOAT){
f=va_arg(var_arg,double);
printf("%f",f);
msg++;
continue;
}
else{
msg--;
}
}
printf("%c",*msg);
msg++;
}
va_end(var_arg);
}
void main()
{
int a=115;
double d=24.335;
print("print int:%d %d,print float:%f %f\n",a,a+10,d,d-5);
}
代码写得不好,仅起到示例作用