模拟实现printf。例如实现print("d\tcc s!\n",3,'w','e',"welcome to you");

使用可变参数应该有以下步骤:

1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.

2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数.

3)然后用va_arg返回可变的参数,并赋值给某数. va_arg的第二个参数是你要返回的参数的类型.

4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数。

写可变参数的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在这里是variable-argument(可变参数)的意思.

这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件。

 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>


void print(const char *format, ...)
{
	va_list arg;//定义va_list类型变量arg 
	va_start(arg, format);//arg初始化,n是第一个可见参数名字;使arg指向第一个可选参数
	while (*format)
	{
		switch (*format)
		{
		case 'c':
		{
			char ch = va_arg(arg, char);//返回参数列表中的当前参数并使arg指向参数列表中的下一个参数,此处返回字符型
			putchar(ch);
			break;
		}
		case 's':
		{
			char *pc = va_arg(arg, char *); va_arg的第二个参数是你要返回的参数的类型,此处是char *
			while (*pc)
			{
				putchar(*pc);
				pc++;
			}
			break;
		}
		case 'd':
		{
			int q=va_arg(arg,int);//此处返回整型
			putchar(q+'0');
			break;
		}
		default:
			putchar(*format);
			break;
		}
		format++;
	}
	va_end(arg);//把arg指针清为NULL 
}

int main()
{
	print("d\tcc s!\n",3,'w','e',"welcome to you");
	return 0;
}