/*
* dynamic_para.c
*
* Created on: 2012-10-10
* Author: zhaomeng
* 动态参数:
* 在标准头文件<stdarg.h>中包含一组宏定义,它们对如何遍历
* 参数列表进行了定义。
*
* va_list类型用于声明一个变量,该变量将一次引用个参数。定义变量ap
*
* va_list ap;
*
* 宏va_start将ap初始化为指向第一个无名参数的指针
* 在使用ap之前,该宏必须被调用一次。
*
* 参数表至少包括一个有名参数,va_start将最后一个有名参数作为起点
*
* 每次调用va_arg,该函数都将返回一个参数,并将ap指向下一个参数。
* va_arg使用一个类型名来决定返回的对象类型,指针移动的步长。
*
* 最后必须在函数返回前调用va_end,以完成必要的清理工作
*
*/
#include <stdio.h>
//在<stdio.h>头文件中已经包含了<stdarg.h>,这里为了突出说明这个头文件
#include <stdarg.h>
void minprin(char * fmt,...)
{
va_list ap;
char * p,*sval;
int ival;
double dval;
va_start(ap,fmt);
for(p = fmt;*p;p ++)
{
if(*p != '%')
{
putchar(*p);
continue;
}
switch(*++p)
{
case 'd':
ival = va_arg(ap,int);
printf("%d",ival);
break;
case 'f':
dval = va_arg(ap,double);
printf("%f",dval);
break;
case 's':
for(sval = va_arg(ap,char *);*sval;sval ++)
putchar(*sval);
break;
default:
putchar(*p);
break;
}
}
va_end(ap);
}
int main()
{
minprin("this is my printf %d ,is cool %f and what you say %s",2,2.4,"Year");
return 0;
}
C语言动态参数
最新推荐文章于 2024-06-04 10:45:35 发布