模拟实现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; }