C語言動態參數

/*
 * 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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章