可变参数列表

来源:互联网 发布:cookie统计uv存数据 编辑:程序博客网 时间:2024/05/20 19:46
模拟实现printf函数

va_list是在C语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>,用于获取不确定个数的参数

va_start,函数名称,读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程·

va_arg,这个宏被展开成一个包含类型为type,值为ap的表达式。

va_end,配合使用,对程序负责。

#include<stdio.h>
#include<stdarg.h>
void print(char *format, ...)
{
va_list arg;
va_start(arg,format);
while(*format)
{
switch(*format)
{
case 's':
{
char* tmp =va_arg(arg,char*);
while(*tmp)
{
putchar(*tmp);
tmp++;
}
}
break;
case 'c':
{
putchar(va_arg(arg,char));
}
break;
default:
{
putchar(*format);
}
break;
}
format++;
}
va_end(arg);
}
int main()
{
print("val:s ccccc\n","hello",'w','o','r','l','d');
return 0;
}
0 0