【c语言】实现可变参数列表

    C语言中时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:


int printf( const char* format, ...);


它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),即···可以写任意参数,该函数有一个参数,其后占位符…,表示后面参数的个数不定.,但第一个参数是必须的,同时在这里要用到函数库里的三个函数:

va_start

,va_arg,

va_end

它们是在stdarg.h中被定义成宏的。

在这里实现一个my—pintf()函数,仅实现了字符和字符串的输出。

代码如下:

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

void my_printf(char *fmt,...)//fmt是可变函数参数列表里必须有的参数
{
	va_list arg;
	va_start(arg,fmt);
	while (*fmt != '\0')
	{
		switch (*fmt)
		{	
		
		   case 'c':
			{
				char c = va_arg(arg, char);
				putchar(c);
				break;
			}
			case 's':
			{
				char *p = va_arg(arg, char *);
				fputs(p, stdout);
				break;
			}	
		
		
			default:
			{
				putchar(*fmt);
				break; 
			}		
		}
		fmt++;
	}
	va_end(arg);
}

int main()
{
	my_printf("c\ns\n",'a',"hello");
	return 0;
}
【c语言】实现可变参数列表_第1张图片

你可能感兴趣的:(printf,C语言)