/*
* 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語言動態參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.