模拟实现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;
}
转载于:https://blog.51cto.com/luoyafei/1712345